@stripe/stripe-react-native 0.21.0 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/android/build.gradle +1 -0
  3. package/android/proguard-rules.txt +7 -0
  4. package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +4 -2
  5. package/android/src/main/java/com/reactnativestripesdk/CardFormView.kt +2 -3
  6. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonManager.kt +5 -0
  7. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +46 -8
  8. package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherFragment.kt +132 -0
  9. package/android/src/main/java/com/reactnativestripesdk/GooglePayRequestHelper.kt +144 -0
  10. package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +123 -8
  11. package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +5 -0
  12. package/android/src/main/res/drawable/book_with_googlepay_button_content.xml +14 -0
  13. package/android/src/main/res/drawable/buy_with_googlepay_button_content.xml +14 -0
  14. package/android/src/main/res/drawable/checkout_with_googlepay_button_content.xml +14 -0
  15. package/android/src/main/res/drawable/donate_with_googlepay_button_content.xml +14 -0
  16. package/android/src/main/res/drawable/googlepay_button_background_shape.xml +11 -0
  17. package/android/src/main/res/drawable/googlepay_mark_background.xml +12 -0
  18. package/android/src/main/res/drawable/googlepay_mark_content.xml +27 -0
  19. package/android/src/main/res/drawable/order_with_googlepay_button_content.xml +14 -0
  20. package/android/src/main/res/drawable/pay_with_googlepay_button_content.xml +6 -6
  21. package/android/src/main/res/drawable/subscribe_with_googlepay_button_content.xml +14 -0
  22. package/android/src/main/res/drawable-ar/book_with_googlepay_button_content.xml +14 -0
  23. package/android/src/main/res/drawable-ar/buy_with_googlepay_button_content.xml +14 -0
  24. package/android/src/main/res/drawable-ar/checkout_with_googlepay_button_content.xml +14 -0
  25. package/android/src/main/res/drawable-ar/donate_with_googlepay_button_content.xml +14 -0
  26. package/android/src/main/res/drawable-ar/order_with_googlepay_button_content.xml +14 -0
  27. package/android/src/main/res/drawable-ar/pay_with_googlepay_button_content.xml +6 -6
  28. package/android/src/main/res/drawable-ar/subscribe_with_googlepay_button_content.xml +14 -0
  29. package/android/src/main/res/drawable-bg/book_with_googlepay_button_content.xml +14 -0
  30. package/android/src/main/res/drawable-bg/buy_with_googlepay_button_content.xml +14 -0
  31. package/android/src/main/res/drawable-bg/checkout_with_googlepay_button_content.xml +14 -0
  32. package/android/src/main/res/drawable-bg/donate_with_googlepay_button_content.xml +14 -0
  33. package/android/src/main/res/drawable-bg/order_with_googlepay_button_content.xml +14 -0
  34. package/android/src/main/res/drawable-bg/pay_with_googlepay_button_content.xml +4 -4
  35. package/android/src/main/res/drawable-bg/subscribe_with_googlepay_button_content.xml +14 -0
  36. package/android/src/main/res/drawable-ca/book_with_googlepay_button_content.xml +14 -0
  37. package/android/src/main/res/drawable-ca/buy_with_googlepay_button_content.xml +14 -0
  38. package/android/src/main/res/drawable-ca/checkout_with_googlepay_button_content.xml +14 -0
  39. package/android/src/main/res/drawable-ca/donate_with_googlepay_button_content.xml +14 -0
  40. package/android/src/main/res/drawable-ca/order_with_googlepay_button_content.xml +14 -0
  41. package/android/src/main/res/drawable-ca/pay_with_googlepay_button_content.xml +6 -6
  42. package/android/src/main/res/drawable-ca/subscribe_with_googlepay_button_content.xml +14 -0
  43. package/android/src/main/res/drawable-cs/book_with_googlepay_button_content.xml +14 -0
  44. package/android/src/main/res/drawable-cs/buy_with_googlepay_button_content.xml +14 -0
  45. package/android/src/main/res/drawable-cs/checkout_with_googlepay_button_content.xml +14 -0
  46. package/android/src/main/res/drawable-cs/donate_with_googlepay_button_content.xml +14 -0
  47. package/android/src/main/res/drawable-cs/order_with_googlepay_button_content.xml +14 -0
  48. package/android/src/main/res/drawable-cs/pay_with_googlepay_button_content.xml +6 -6
  49. package/android/src/main/res/drawable-cs/subscribe_with_googlepay_button_content.xml +14 -0
  50. package/android/src/main/res/drawable-da/book_with_googlepay_button_content.xml +14 -0
  51. package/android/src/main/res/drawable-da/buy_with_googlepay_button_content.xml +14 -0
  52. package/android/src/main/res/drawable-da/checkout_with_googlepay_button_content.xml +14 -0
  53. package/android/src/main/res/drawable-da/donate_with_googlepay_button_content.xml +14 -0
  54. package/android/src/main/res/drawable-da/order_with_googlepay_button_content.xml +14 -0
  55. package/android/src/main/res/drawable-da/pay_with_googlepay_button_content.xml +6 -6
  56. package/android/src/main/res/drawable-da/subscribe_with_googlepay_button_content.xml +14 -0
  57. package/android/src/main/res/drawable-de/book_with_googlepay_button_content.xml +15 -0
  58. package/android/src/main/res/drawable-de/buy_with_googlepay_button_content.xml +15 -0
  59. package/android/src/main/res/drawable-de/checkout_with_googlepay_button_content.xml +15 -0
  60. package/android/src/main/res/drawable-de/donate_with_googlepay_button_content.xml +15 -0
  61. package/android/src/main/res/drawable-de/order_with_googlepay_button_content.xml +15 -0
  62. package/android/src/main/res/drawable-de/pay_with_googlepay_button_content.xml +7 -7
  63. package/android/src/main/res/drawable-de/subscribe_with_googlepay_button_content.xml +15 -0
  64. package/android/src/main/res/drawable-el/book_with_googlepay_button_content.xml +14 -0
  65. package/android/src/main/res/drawable-el/buy_with_googlepay_button_content.xml +14 -0
  66. package/android/src/main/res/drawable-el/checkout_with_googlepay_button_content.xml +14 -0
  67. package/android/src/main/res/drawable-el/donate_with_googlepay_button_content.xml +14 -0
  68. package/android/src/main/res/drawable-el/order_with_googlepay_button_content.xml +14 -0
  69. package/android/src/main/res/drawable-el/pay_with_googlepay_button_content.xml +4 -4
  70. package/android/src/main/res/drawable-el/subscribe_with_googlepay_button_content.xml +14 -0
  71. package/android/src/main/res/drawable-et/book_with_googlepay_button_content.xml +15 -0
  72. package/android/src/main/res/drawable-et/buy_with_googlepay_button_content.xml +15 -0
  73. package/android/src/main/res/drawable-et/checkout_with_googlepay_button_content.xml +15 -0
  74. package/android/src/main/res/drawable-et/donate_with_googlepay_button_content.xml +15 -0
  75. package/android/src/main/res/drawable-et/order_with_googlepay_button_content.xml +15 -0
  76. package/android/src/main/res/drawable-et/pay_with_googlepay_button_content.xml +8 -8
  77. package/android/src/main/res/drawable-et/subscribe_with_googlepay_button_content.xml +15 -0
  78. package/android/src/main/res/drawable-fi/book_with_googlepay_button_content.xml +15 -0
  79. package/android/src/main/res/drawable-fi/buy_with_googlepay_button_content.xml +15 -0
  80. package/android/src/main/res/drawable-fi/checkout_with_googlepay_button_content.xml +15 -0
  81. package/android/src/main/res/drawable-fi/donate_with_googlepay_button_content.xml +15 -0
  82. package/android/src/main/res/drawable-fi/order_with_googlepay_button_content.xml +15 -0
  83. package/android/src/main/res/drawable-fi/pay_with_googlepay_button_content.xml +8 -8
  84. package/android/src/main/res/drawable-fi/subscribe_with_googlepay_button_content.xml +15 -0
  85. package/android/src/main/res/drawable-fr/book_with_googlepay_button_content.xml +14 -0
  86. package/android/src/main/res/drawable-fr/buy_with_googlepay_button_content.xml +14 -0
  87. package/android/src/main/res/drawable-fr/checkout_with_googlepay_button_content.xml +14 -0
  88. package/android/src/main/res/drawable-fr/donate_with_googlepay_button_content.xml +14 -0
  89. package/android/src/main/res/drawable-fr/order_with_googlepay_button_content.xml +14 -0
  90. package/android/src/main/res/drawable-fr/pay_with_googlepay_button_content.xml +5 -5
  91. package/android/src/main/res/drawable-fr/subscribe_with_googlepay_button_content.xml +14 -0
  92. package/android/src/main/res/drawable-hr/book_with_googlepay_button_content.xml +14 -0
  93. package/android/src/main/res/drawable-hr/buy_with_googlepay_button_content.xml +14 -0
  94. package/android/src/main/res/drawable-hr/checkout_with_googlepay_button_content.xml +14 -0
  95. package/android/src/main/res/drawable-hr/donate_with_googlepay_button_content.xml +14 -0
  96. package/android/src/main/res/drawable-hr/order_with_googlepay_button_content.xml +14 -0
  97. package/android/src/main/res/drawable-hr/pay_with_googlepay_button_content.xml +4 -4
  98. package/android/src/main/res/drawable-hr/subscribe_with_googlepay_button_content.xml +14 -0
  99. package/android/src/main/res/drawable-id/book_with_googlepay_button_content.xml +14 -0
  100. package/android/src/main/res/drawable-id/buy_with_googlepay_button_content.xml +14 -0
  101. package/android/src/main/res/drawable-id/checkout_with_googlepay_button_content.xml +14 -0
  102. package/android/src/main/res/drawable-id/donate_with_googlepay_button_content.xml +14 -0
  103. package/android/src/main/res/drawable-id/order_with_googlepay_button_content.xml +14 -0
  104. package/android/src/main/res/drawable-id/pay_with_googlepay_button_content.xml +4 -4
  105. package/android/src/main/res/drawable-id/subscribe_with_googlepay_button_content.xml +14 -0
  106. package/android/src/main/res/drawable-it/book_with_googlepay_button_content.xml +14 -0
  107. package/android/src/main/res/drawable-it/buy_with_googlepay_button_content.xml +14 -0
  108. package/android/src/main/res/drawable-it/checkout_with_googlepay_button_content.xml +14 -0
  109. package/android/src/main/res/drawable-it/donate_with_googlepay_button_content.xml +14 -0
  110. package/android/src/main/res/drawable-it/order_with_googlepay_button_content.xml +14 -0
  111. package/android/src/main/res/drawable-it/pay_with_googlepay_button_content.xml +6 -6
  112. package/android/src/main/res/drawable-it/subscribe_with_googlepay_button_content.xml +14 -0
  113. package/android/src/main/res/drawable-ja/book_with_googlepay_button_content.xml +14 -0
  114. package/android/src/main/res/drawable-ja/buy_with_googlepay_button_content.xml +14 -0
  115. package/android/src/main/res/drawable-ja/checkout_with_googlepay_button_content.xml +14 -0
  116. package/android/src/main/res/drawable-ja/donate_with_googlepay_button_content.xml +14 -0
  117. package/android/src/main/res/drawable-ja/order_with_googlepay_button_content.xml +14 -0
  118. package/android/src/main/res/drawable-ja/pay_with_googlepay_button_content.xml +5 -5
  119. package/android/src/main/res/drawable-ja/subscribe_with_googlepay_button_content.xml +14 -0
  120. package/android/src/main/res/drawable-ko/book_with_googlepay_button_content.xml +14 -0
  121. package/android/src/main/res/drawable-ko/buy_with_googlepay_button_content.xml +14 -0
  122. package/android/src/main/res/drawable-ko/checkout_with_googlepay_button_content.xml +14 -0
  123. package/android/src/main/res/drawable-ko/donate_with_googlepay_button_content.xml +14 -0
  124. package/android/src/main/res/drawable-ko/order_with_googlepay_button_content.xml +14 -0
  125. package/android/src/main/res/drawable-ko/pay_with_googlepay_button_content.xml +7 -7
  126. package/android/src/main/res/drawable-ko/subscribe_with_googlepay_button_content.xml +14 -0
  127. package/android/src/main/res/drawable-ms/book_with_googlepay_button_content.xml +14 -0
  128. package/android/src/main/res/drawable-ms/buy_with_googlepay_button_content.xml +14 -0
  129. package/android/src/main/res/drawable-ms/checkout_with_googlepay_button_content.xml +14 -0
  130. package/android/src/main/res/drawable-ms/donate_with_googlepay_button_content.xml +14 -0
  131. package/android/src/main/res/drawable-ms/order_with_googlepay_button_content.xml +14 -0
  132. package/android/src/main/res/drawable-ms/pay_with_googlepay_button_content.xml +4 -4
  133. package/android/src/main/res/drawable-ms/subscribe_with_googlepay_button_content.xml +14 -0
  134. package/android/src/main/res/drawable-nl/book_with_googlepay_button_content.xml +14 -0
  135. package/android/src/main/res/drawable-nl/buy_with_googlepay_button_content.xml +14 -0
  136. package/android/src/main/res/drawable-nl/checkout_with_googlepay_button_content.xml +14 -0
  137. package/android/src/main/res/drawable-nl/donate_with_googlepay_button_content.xml +14 -0
  138. package/android/src/main/res/drawable-nl/order_with_googlepay_button_content.xml +14 -0
  139. package/android/src/main/res/drawable-nl/pay_with_googlepay_button_content.xml +4 -4
  140. package/android/src/main/res/drawable-nl/subscribe_with_googlepay_button_content.xml +14 -0
  141. package/android/src/main/res/drawable-no/book_with_googlepay_button_content.xml +14 -0
  142. package/android/src/main/res/drawable-no/buy_with_googlepay_button_content.xml +14 -0
  143. package/android/src/main/res/drawable-no/checkout_with_googlepay_button_content.xml +14 -0
  144. package/android/src/main/res/drawable-no/donate_with_googlepay_button_content.xml +14 -0
  145. package/android/src/main/res/drawable-no/order_with_googlepay_button_content.xml +14 -0
  146. package/android/src/main/res/drawable-no/pay_with_googlepay_button_content.xml +6 -6
  147. package/android/src/main/res/drawable-no/subscribe_with_googlepay_button_content.xml +14 -0
  148. package/android/src/main/res/drawable-pl/book_with_googlepay_button_content.xml +14 -0
  149. package/android/src/main/res/drawable-pl/buy_with_googlepay_button_content.xml +14 -0
  150. package/android/src/main/res/drawable-pl/checkout_with_googlepay_button_content.xml +14 -0
  151. package/android/src/main/res/drawable-pl/donate_with_googlepay_button_content.xml +14 -0
  152. package/android/src/main/res/drawable-pl/order_with_googlepay_button_content.xml +14 -0
  153. package/android/src/main/res/drawable-pl/pay_with_googlepay_button_content.xml +7 -7
  154. package/android/src/main/res/drawable-pl/subscribe_with_googlepay_button_content.xml +14 -0
  155. package/android/src/main/res/drawable-ru/book_with_googlepay_button_content.xml +14 -0
  156. package/android/src/main/res/drawable-ru/buy_with_googlepay_button_content.xml +14 -0
  157. package/android/src/main/res/drawable-ru/checkout_with_googlepay_button_content.xml +14 -0
  158. package/android/src/main/res/drawable-ru/donate_with_googlepay_button_content.xml +14 -0
  159. package/android/src/main/res/drawable-ru/order_with_googlepay_button_content.xml +14 -0
  160. package/android/src/main/res/drawable-ru/pay_with_googlepay_button_content.xml +7 -7
  161. package/android/src/main/res/drawable-ru/subscribe_with_googlepay_button_content.xml +14 -0
  162. package/android/src/main/res/drawable-sk/book_with_googlepay_button_content.xml +14 -0
  163. package/android/src/main/res/drawable-sk/buy_with_googlepay_button_content.xml +14 -0
  164. package/android/src/main/res/drawable-sk/checkout_with_googlepay_button_content.xml +14 -0
  165. package/android/src/main/res/drawable-sk/donate_with_googlepay_button_content.xml +14 -0
  166. package/android/src/main/res/drawable-sk/order_with_googlepay_button_content.xml +14 -0
  167. package/android/src/main/res/drawable-sk/pay_with_googlepay_button_content.xml +4 -4
  168. package/android/src/main/res/drawable-sk/subscribe_with_googlepay_button_content.xml +14 -0
  169. package/android/src/main/res/drawable-sl/book_with_googlepay_button_content.xml +14 -0
  170. package/android/src/main/res/drawable-sl/buy_with_googlepay_button_content.xml +14 -0
  171. package/android/src/main/res/drawable-sl/checkout_with_googlepay_button_content.xml +14 -0
  172. package/android/src/main/res/drawable-sl/donate_with_googlepay_button_content.xml +14 -0
  173. package/android/src/main/res/drawable-sl/order_with_googlepay_button_content.xml +14 -0
  174. package/android/src/main/res/drawable-sl/pay_with_googlepay_button_content.xml +4 -4
  175. package/android/src/main/res/drawable-sl/subscribe_with_googlepay_button_content.xml +14 -0
  176. package/android/src/main/res/drawable-sr/book_with_googlepay_button_content.xml +14 -0
  177. package/android/src/main/res/drawable-sr/buy_with_googlepay_button_content.xml +14 -0
  178. package/android/src/main/res/drawable-sr/checkout_with_googlepay_button_content.xml +14 -0
  179. package/android/src/main/res/drawable-sr/donate_with_googlepay_button_content.xml +14 -0
  180. package/android/src/main/res/drawable-sr/order_with_googlepay_button_content.xml +14 -0
  181. package/android/src/main/res/drawable-sr/pay_with_googlepay_button_content.xml +7 -7
  182. package/android/src/main/res/drawable-sr/subscribe_with_googlepay_button_content.xml +14 -0
  183. package/android/src/main/res/drawable-sv/book_with_googlepay_button_content.xml +14 -0
  184. package/android/src/main/res/drawable-sv/buy_with_googlepay_button_content.xml +14 -0
  185. package/android/src/main/res/drawable-sv/checkout_with_googlepay_button_content.xml +14 -0
  186. package/android/src/main/res/drawable-sv/donate_with_googlepay_button_content.xml +14 -0
  187. package/android/src/main/res/drawable-sv/order_with_googlepay_button_content.xml +14 -0
  188. package/android/src/main/res/drawable-sv/pay_with_googlepay_button_content.xml +4 -4
  189. package/android/src/main/res/drawable-sv/subscribe_with_googlepay_button_content.xml +14 -0
  190. package/android/src/main/res/drawable-th/book_with_googlepay_button_content.xml +14 -0
  191. package/android/src/main/res/drawable-th/buy_with_googlepay_button_content.xml +14 -0
  192. package/android/src/main/res/drawable-th/checkout_with_googlepay_button_content.xml +14 -0
  193. package/android/src/main/res/drawable-th/donate_with_googlepay_button_content.xml +14 -0
  194. package/android/src/main/res/drawable-th/order_with_googlepay_button_content.xml +14 -0
  195. package/android/src/main/res/drawable-th/pay_with_googlepay_button_content.xml +6 -6
  196. package/android/src/main/res/drawable-th/subscribe_with_googlepay_button_content.xml +14 -0
  197. package/android/src/main/res/drawable-tr/book_with_googlepay_button_content.xml +14 -0
  198. package/android/src/main/res/drawable-tr/buy_with_googlepay_button_content.xml +14 -0
  199. package/android/src/main/res/drawable-tr/checkout_with_googlepay_button_content.xml +14 -0
  200. package/android/src/main/res/drawable-tr/donate_with_googlepay_button_content.xml +14 -0
  201. package/android/src/main/res/drawable-tr/order_with_googlepay_button_content.xml +14 -0
  202. package/android/src/main/res/drawable-tr/pay_with_googlepay_button_content.xml +7 -7
  203. package/android/src/main/res/drawable-tr/subscribe_with_googlepay_button_content.xml +14 -0
  204. package/android/src/main/res/drawable-uk/book_with_googlepay_button_content.xml +14 -0
  205. package/android/src/main/res/drawable-uk/buy_with_googlepay_button_content.xml +14 -0
  206. package/android/src/main/res/drawable-uk/checkout_with_googlepay_button_content.xml +14 -0
  207. package/android/src/main/res/drawable-uk/donate_with_googlepay_button_content.xml +14 -0
  208. package/android/src/main/res/drawable-uk/order_with_googlepay_button_content.xml +14 -0
  209. package/android/src/main/res/drawable-uk/pay_with_googlepay_button_content.xml +5 -5
  210. package/android/src/main/res/drawable-uk/subscribe_with_googlepay_button_content.xml +14 -0
  211. package/android/src/main/res/layout/book_with_googlepay_button.xml +20 -0
  212. package/android/src/main/res/layout/buy_with_googlepay_button.xml +20 -0
  213. package/android/src/main/res/layout/checkout_with_googlepay_button.xml +20 -0
  214. package/android/src/main/res/layout/donate_with_googlepay_button.xml +20 -0
  215. package/android/src/main/res/layout/googlepay_mark_button.xml +18 -0
  216. package/android/src/main/res/layout/order_with_googlepay_button.xml +20 -0
  217. package/android/src/main/res/layout/pay_with_googlepay_button.xml +10 -24
  218. package/android/src/main/res/layout/plain_googlepay_button.xml +17 -0
  219. package/android/src/main/res/layout/subscribe_with_googlepay_button.xml +20 -0
  220. package/android/src/main/res/values/googlepay_strings.xml +3 -2
  221. package/ios/ApplePayButtonManager.m +5 -0
  222. package/ios/ApplePayButtonManager.swift +3 -1
  223. package/ios/ApplePayButtonView.swift +21 -0
  224. package/ios/ApplePayUtils.swift +187 -0
  225. package/ios/ApplePayViewController.swift +279 -0
  226. package/ios/Mappers.swift +26 -7
  227. package/ios/PaymentPassFinder.swift +61 -0
  228. package/ios/PushProvisioning/AddToWalletButtonView.swift +10 -10
  229. package/ios/PushProvisioning/PushProvisioningUtils.swift +39 -16
  230. package/ios/StripeSdk.m +29 -0
  231. package/ios/StripeSdk.swift +193 -129
  232. package/ios/Tests/AddressSheetUtilsTests.swift +1 -7
  233. package/ios/Tests/PushProvisioningTests.swift +14 -11
  234. package/jest/mock.js +44 -0
  235. package/lib/commonjs/NativeStripeSdk.js.map +1 -1
  236. package/lib/commonjs/components/AddToWalletButton.js.map +1 -1
  237. package/lib/commonjs/components/AddressSheet.js.map +1 -1
  238. package/lib/commonjs/components/ApplePayButton.js +1 -1
  239. package/lib/commonjs/components/ApplePayButton.js.map +1 -1
  240. package/lib/commonjs/components/ApplePayButtonNative.js +2 -0
  241. package/lib/commonjs/components/ApplePayButtonNative.js.map +1 -0
  242. package/lib/commonjs/components/AuBECSDebitForm.js.map +1 -1
  243. package/lib/commonjs/components/CardField.js.map +1 -1
  244. package/lib/commonjs/components/CardForm.js.map +1 -1
  245. package/lib/commonjs/components/GooglePayButton.js +1 -1
  246. package/lib/commonjs/components/GooglePayButton.js.map +1 -1
  247. package/lib/commonjs/components/GooglePayButtonNative.js +2 -0
  248. package/lib/commonjs/components/GooglePayButtonNative.js.map +1 -0
  249. package/lib/commonjs/components/PlatformPayButton.js +2 -0
  250. package/lib/commonjs/components/PlatformPayButton.js.map +1 -0
  251. package/lib/commonjs/components/StripeContainer.js.map +1 -1
  252. package/lib/commonjs/components/StripeProvider.js.map +1 -1
  253. package/lib/commonjs/functions.js +1 -1
  254. package/lib/commonjs/functions.js.map +1 -1
  255. package/lib/commonjs/helpers.js.map +1 -1
  256. package/lib/commonjs/hooks/useApplePay.js.map +1 -1
  257. package/lib/commonjs/hooks/useConfirmPayment.js.map +1 -1
  258. package/lib/commonjs/hooks/useConfirmSetupIntent.js.map +1 -1
  259. package/lib/commonjs/hooks/useFinancialConnectionsSheet.js.map +1 -1
  260. package/lib/commonjs/hooks/useGooglePay.js.map +1 -1
  261. package/lib/commonjs/hooks/usePaymentSheet.js.map +1 -1
  262. package/lib/commonjs/hooks/usePlatformPay.js +2 -0
  263. package/lib/commonjs/hooks/usePlatformPay.js.map +1 -0
  264. package/lib/commonjs/hooks/useStripe.js +1 -1
  265. package/lib/commonjs/hooks/useStripe.js.map +1 -1
  266. package/lib/commonjs/index.js +1 -1
  267. package/lib/commonjs/index.js.map +1 -1
  268. package/lib/commonjs/plugin/withStripe.js.map +1 -1
  269. package/lib/commonjs/types/ApplePay.js.map +1 -1
  270. package/lib/commonjs/types/Common.js.map +1 -1
  271. package/lib/commonjs/types/Errors.js +1 -1
  272. package/lib/commonjs/types/Errors.js.map +1 -1
  273. package/lib/commonjs/types/FinancialConnections.js.map +1 -1
  274. package/lib/commonjs/types/GooglePay.js.map +1 -1
  275. package/lib/commonjs/types/NextAction.js.map +1 -1
  276. package/lib/commonjs/types/PaymentIntent.js.map +1 -1
  277. package/lib/commonjs/types/PaymentMethod.js.map +1 -1
  278. package/lib/commonjs/types/PaymentSheet.js.map +1 -1
  279. package/lib/commonjs/types/PlatformPay.js +2 -0
  280. package/lib/commonjs/types/PlatformPay.js.map +1 -0
  281. package/lib/commonjs/types/PushProvisioning.js +2 -0
  282. package/lib/commonjs/types/PushProvisioning.js.map +1 -0
  283. package/lib/commonjs/types/SetupIntent.js.map +1 -1
  284. package/lib/commonjs/types/ThreeDSecure.js.map +1 -1
  285. package/lib/commonjs/types/Token.js.map +1 -1
  286. package/lib/commonjs/types/components/ApplePayButtonComponent.js.map +1 -1
  287. package/lib/commonjs/types/components/AuBECSDebitFormComponent.js.map +1 -1
  288. package/lib/commonjs/types/components/CardFieldInput.js.map +1 -1
  289. package/lib/commonjs/types/components/CardFormView.js.map +1 -1
  290. package/lib/commonjs/types/components/GooglePayButtonComponent.js +2 -0
  291. package/lib/commonjs/types/components/GooglePayButtonComponent.js.map +1 -0
  292. package/lib/commonjs/types/index.js +1 -1
  293. package/lib/commonjs/types/index.js.map +1 -1
  294. package/lib/module/NativeStripeSdk.js.map +1 -1
  295. package/lib/module/components/AddToWalletButton.js.map +1 -1
  296. package/lib/module/components/AddressSheet.js.map +1 -1
  297. package/lib/module/components/ApplePayButton.js +1 -1
  298. package/lib/module/components/ApplePayButton.js.map +1 -1
  299. package/lib/module/components/ApplePayButtonNative.js +2 -0
  300. package/lib/module/components/ApplePayButtonNative.js.map +1 -0
  301. package/lib/module/components/AuBECSDebitForm.js.map +1 -1
  302. package/lib/module/components/CardField.js.map +1 -1
  303. package/lib/module/components/CardForm.js.map +1 -1
  304. package/lib/module/components/GooglePayButton.js +1 -1
  305. package/lib/module/components/GooglePayButton.js.map +1 -1
  306. package/lib/module/components/GooglePayButtonNative.js +2 -0
  307. package/lib/module/components/GooglePayButtonNative.js.map +1 -0
  308. package/lib/module/components/PlatformPayButton.js +2 -0
  309. package/lib/module/components/PlatformPayButton.js.map +1 -0
  310. package/lib/module/components/StripeContainer.js.map +1 -1
  311. package/lib/module/components/StripeProvider.js.map +1 -1
  312. package/lib/module/functions.js +1 -1
  313. package/lib/module/functions.js.map +1 -1
  314. package/lib/module/helpers.js.map +1 -1
  315. package/lib/module/hooks/useApplePay.js.map +1 -1
  316. package/lib/module/hooks/useConfirmPayment.js.map +1 -1
  317. package/lib/module/hooks/useConfirmSetupIntent.js.map +1 -1
  318. package/lib/module/hooks/useFinancialConnectionsSheet.js.map +1 -1
  319. package/lib/module/hooks/useGooglePay.js.map +1 -1
  320. package/lib/module/hooks/usePaymentSheet.js.map +1 -1
  321. package/lib/module/hooks/usePlatformPay.js +2 -0
  322. package/lib/module/hooks/usePlatformPay.js.map +1 -0
  323. package/lib/module/hooks/useStripe.js +1 -1
  324. package/lib/module/hooks/useStripe.js.map +1 -1
  325. package/lib/module/index.js +1 -1
  326. package/lib/module/index.js.map +1 -1
  327. package/lib/module/plugin/withStripe.js.map +1 -1
  328. package/lib/module/types/ApplePay.js.map +1 -1
  329. package/lib/module/types/Common.js.map +1 -1
  330. package/lib/module/types/Errors.js +1 -1
  331. package/lib/module/types/Errors.js.map +1 -1
  332. package/lib/module/types/FinancialConnections.js.map +1 -1
  333. package/lib/module/types/GooglePay.js.map +1 -1
  334. package/lib/module/types/NextAction.js.map +1 -1
  335. package/lib/module/types/PaymentIntent.js.map +1 -1
  336. package/lib/module/types/PaymentMethod.js.map +1 -1
  337. package/lib/module/types/PaymentSheet.js.map +1 -1
  338. package/lib/module/types/PlatformPay.js +2 -0
  339. package/lib/module/types/PlatformPay.js.map +1 -0
  340. package/lib/module/types/PushProvisioning.js +2 -0
  341. package/lib/module/types/PushProvisioning.js.map +1 -0
  342. package/lib/module/types/SetupIntent.js.map +1 -1
  343. package/lib/module/types/ThreeDSecure.js.map +1 -1
  344. package/lib/module/types/Token.js.map +1 -1
  345. package/lib/module/types/components/ApplePayButtonComponent.js.map +1 -1
  346. package/lib/module/types/components/AuBECSDebitFormComponent.js.map +1 -1
  347. package/lib/module/types/components/CardFieldInput.js.map +1 -1
  348. package/lib/module/types/components/CardFormView.js.map +1 -1
  349. package/lib/module/types/components/GooglePayButtonComponent.js +2 -0
  350. package/lib/module/types/components/GooglePayButtonComponent.js.map +1 -0
  351. package/lib/module/types/index.js +1 -1
  352. package/lib/module/types/index.js.map +1 -1
  353. package/lib/typescript/src/NativeStripeSdk.d.ts +8 -1
  354. package/lib/typescript/src/components/ApplePayButton.d.ts +1 -1
  355. package/lib/typescript/src/components/ApplePayButtonNative.d.ts +3 -0
  356. package/lib/typescript/src/components/GooglePayButtonNative.d.ts +3 -0
  357. package/lib/typescript/src/components/PlatformPayButton.d.ts +65 -0
  358. package/lib/typescript/src/functions.d.ts +73 -1
  359. package/lib/typescript/src/hooks/usePlatformPay.d.ts +70 -0
  360. package/lib/typescript/src/hooks/useStripe.d.ts +18 -1
  361. package/lib/typescript/src/index.d.ts +2 -0
  362. package/lib/typescript/src/types/ApplePay.d.ts +9 -0
  363. package/lib/typescript/src/types/Errors.d.ts +6 -1
  364. package/lib/typescript/src/types/GooglePay.d.ts +2 -1
  365. package/lib/typescript/src/types/PlatformPay.d.ts +285 -0
  366. package/lib/typescript/src/types/PushProvisioning.d.ts +66 -0
  367. package/lib/typescript/src/types/Token.d.ts +1 -0
  368. package/lib/typescript/src/types/components/ApplePayButtonComponent.d.ts +14 -3
  369. package/lib/typescript/src/types/components/GooglePayButtonComponent.d.ts +6 -0
  370. package/lib/typescript/src/types/index.d.ts +4 -38
  371. package/package.json +10 -3
  372. package/src/NativeStripeSdk.tsx +20 -0
  373. package/src/components/ApplePayButton.tsx +3 -10
  374. package/src/components/ApplePayButtonNative.tsx +5 -0
  375. package/src/components/GooglePayButton.tsx +1 -3
  376. package/src/components/GooglePayButtonNative.tsx +7 -0
  377. package/src/components/PlatformPayButton.tsx +155 -0
  378. package/src/functions.ts +181 -0
  379. package/src/hooks/usePlatformPay.tsx +174 -0
  380. package/src/hooks/useStripe.tsx +77 -0
  381. package/src/index.tsx +6 -0
  382. package/src/types/ApplePay.ts +9 -0
  383. package/src/types/Errors.ts +7 -1
  384. package/src/types/GooglePay.ts +2 -1
  385. package/src/types/PlatformPay.ts +326 -0
  386. package/src/types/PushProvisioning.ts +76 -0
  387. package/src/types/Token.ts +1 -0
  388. package/src/types/components/ApplePayButtonComponent.ts +21 -4
  389. package/src/types/components/GooglePayButtonComponent.ts +6 -0
  390. package/src/types/index.ts +5 -54
  391. package/stripe-react-native.podspec +1 -1
  392. package/android/src/main/res/drawable/googlepay_button_background.xml +0 -6
  393. package/android/src/main/res/drawable/googlepay_button_content.xml +0 -48
  394. package/android/src/main/res/drawable/googlepay_button_overlay.xml +0 -12
  395. package/android/src/main/res/drawable-af/pay_with_googlepay_button_content.xml +0 -14
  396. package/android/src/main/res/drawable-am/pay_with_googlepay_button_content.xml +0 -15
  397. package/android/src/main/res/drawable-as/pay_with_googlepay_button_content.xml +0 -14
  398. package/android/src/main/res/drawable-az/pay_with_googlepay_button_content.xml +0 -14
  399. package/android/src/main/res/drawable-be/pay_with_googlepay_button_content.xml +0 -14
  400. package/android/src/main/res/drawable-bn/pay_with_googlepay_button_content.xml +0 -14
  401. package/android/src/main/res/drawable-bs/pay_with_googlepay_button_content.xml +0 -14
  402. package/android/src/main/res/drawable-cy/pay_with_googlepay_button_content.xml +0 -14
  403. package/android/src/main/res/drawable-en-rau/pay_with_googlepay_button_content.xml +0 -14
  404. package/android/src/main/res/drawable-en-rca/pay_with_googlepay_button_content.xml +0 -14
  405. package/android/src/main/res/drawable-en-rgb/pay_with_googlepay_button_content.xml +0 -14
  406. package/android/src/main/res/drawable-en-rin/pay_with_googlepay_button_content.xml +0 -14
  407. package/android/src/main/res/drawable-es/pay_with_googlepay_button_content.xml +0 -14
  408. package/android/src/main/res/drawable-es-res/pay_with_googlepay_button_content.xml +0 -14
  409. package/android/src/main/res/drawable-eu/pay_with_googlepay_button_content.xml +0 -15
  410. package/android/src/main/res/drawable-fa/pay_with_googlepay_button_content.xml +0 -14
  411. package/android/src/main/res/drawable-fil/pay_with_googlepay_button_content.xml +0 -14
  412. package/android/src/main/res/drawable-fr-rca/pay_with_googlepay_button_content.xml +0 -14
  413. package/android/src/main/res/drawable-ga/pay_with_googlepay_button_content.xml +0 -14
  414. package/android/src/main/res/drawable-gl/pay_with_googlepay_button_content.xml +0 -14
  415. package/android/src/main/res/drawable-gu/pay_with_googlepay_button_content.xml +0 -14
  416. package/android/src/main/res/drawable-hdpi/googlepay_button_background_image.9.png +0 -0
  417. package/android/src/main/res/drawable-hu/pay_with_googlepay_button_content.xml +0 -15
  418. package/android/src/main/res/drawable-hy/pay_with_googlepay_button_content.xml +0 -15
  419. package/android/src/main/res/drawable-is/pay_with_googlepay_button_content.xml +0 -14
  420. package/android/src/main/res/drawable-iw/pay_with_googlepay_button_content.xml +0 -14
  421. package/android/src/main/res/drawable-ka/pay_with_googlepay_button_content.xml +0 -15
  422. package/android/src/main/res/drawable-kk/pay_with_googlepay_button_content.xml +0 -14
  423. package/android/src/main/res/drawable-km/pay_with_googlepay_button_content.xml +0 -14
  424. package/android/src/main/res/drawable-kn/pay_with_googlepay_button_content.xml +0 -14
  425. package/android/src/main/res/drawable-ky/pay_with_googlepay_button_content.xml +0 -14
  426. package/android/src/main/res/drawable-lo/pay_with_googlepay_button_content.xml +0 -14
  427. package/android/src/main/res/drawable-lt/pay_with_googlepay_button_content.xml +0 -14
  428. package/android/src/main/res/drawable-lv/pay_with_googlepay_button_content.xml +0 -14
  429. package/android/src/main/res/drawable-mdpi/googlepay_button_background_image.9.png +0 -0
  430. package/android/src/main/res/drawable-mk/pay_with_googlepay_button_content.xml +0 -14
  431. package/android/src/main/res/drawable-ml/pay_with_googlepay_button_content.xml +0 -14
  432. package/android/src/main/res/drawable-mn/pay_with_googlepay_button_content.xml +0 -14
  433. package/android/src/main/res/drawable-mr/pay_with_googlepay_button_content.xml +0 -14
  434. package/android/src/main/res/drawable-ne/pay_with_googlepay_button_content.xml +0 -14
  435. package/android/src/main/res/drawable-pt-rbr/pay_with_googlepay_button_content.xml +0 -14
  436. package/android/src/main/res/drawable-pt-rpt/pay_with_googlepay_button_content.xml +0 -14
  437. package/android/src/main/res/drawable-ro/pay_with_googlepay_button_content.xml +0 -14
  438. package/android/src/main/res/drawable-sq/pay_with_googlepay_button_content.xml +0 -14
  439. package/android/src/main/res/drawable-sw/pay_with_googlepay_button_content.xml +0 -14
  440. package/android/src/main/res/drawable-ta/pay_with_googlepay_button_content.xml +0 -14
  441. package/android/src/main/res/drawable-te/pay_with_googlepay_button_content.xml +0 -14
  442. package/android/src/main/res/drawable-ur/pay_with_googlepay_button_content.xml +0 -14
  443. package/android/src/main/res/drawable-uz/pay_with_googlepay_button_content.xml +0 -14
  444. package/android/src/main/res/drawable-v21/googlepay_button_background.xml +0 -7
  445. package/android/src/main/res/drawable-vi/pay_with_googlepay_button_content.xml +0 -14
  446. package/android/src/main/res/drawable-xhdpi/googlepay_button_background_image.9.png +0 -0
  447. package/android/src/main/res/drawable-xxhdpi/googlepay_button_background_image.9.png +0 -0
  448. package/android/src/main/res/drawable-xxxhdpi/googlepay_button_background_image.9.png +0 -0
  449. package/android/src/main/res/drawable-zh-rcn/pay_with_googlepay_button_content.xml +0 -15
  450. package/android/src/main/res/drawable-zh-rhk/pay_with_googlepay_button_content.xml +0 -15
  451. package/android/src/main/res/drawable-zh-rtw/pay_with_googlepay_button_content.xml +0 -15
  452. package/android/src/main/res/drawable-zu/pay_with_googlepay_button_content.xml +0 -14
  453. package/android/src/main/res/layout/googlepay_button.xml +0 -39
@@ -10,6 +10,114 @@ import StripePaymentSheet
10
10
 
11
11
  class ApplePayUtils {
12
12
 
13
+ internal class func createPaymentRequest(
14
+ merchantIdentifier: String?,
15
+ params: NSDictionary
16
+ ) -> (error: NSDictionary?, paymentRequest: PKPaymentRequest?) {
17
+ guard let merchantIdentifier = merchantIdentifier else {
18
+ return (Errors.createError(ErrorType.Failed, "You must provide merchantIdentifier"), nil)
19
+ }
20
+
21
+ if let additionalEnabledNetworks = params["additionalEnabledNetworks"] as? [String] {
22
+ do {
23
+ StripeAPI.additionalEnabledApplePayNetworks = try ApplePayUtils.mapToArrayOfPaymentNetworks(arrayOfStrings: additionalEnabledNetworks)
24
+ } catch {
25
+ return (Errors.createError(ErrorType.Failed, error.localizedDescription), nil)
26
+ }
27
+ } else if (params["jcbEnabled"] as? Bool == true) {
28
+ StripeAPI.additionalEnabledApplePayNetworks = [.JCB]
29
+ }
30
+
31
+ guard let summaryItems = params["cartItems"] as? NSArray else {
32
+ return (Errors.createError(ErrorType.Failed, "`cartItems` cannot be null."), nil)
33
+ }
34
+ if (summaryItems.count == 0) {
35
+ return (Errors.createError(ErrorType.Failed, "`cartItems` cannot be empty."), nil)
36
+ }
37
+
38
+ guard let countryCode = ((params.object(forKey: "merchantCountryCode") != nil) ? params["merchantCountryCode"] : params["country"]) as? String else {
39
+ return (Errors.createError(ErrorType.Failed, "You must provide the country"), nil)
40
+ }
41
+ guard let currencyCode = ((params.object(forKey: "currencyCode") != nil) ? params["currencyCode"] : params["currency"]) as? String else {
42
+ return (Errors.createError(ErrorType.Failed, "You must provide the payment currency"), nil)
43
+ }
44
+
45
+ let paymentRequest = StripeAPI.paymentRequest(withMerchantIdentifier: merchantIdentifier, country: countryCode, currency: currencyCode)
46
+
47
+ let requiredShippingAddressFields = params["requiredShippingAddressFields"] as? NSArray ?? NSArray()
48
+ let requiredBillingContactFields = params["requiredBillingContactFields"] as? NSArray ?? NSArray()
49
+ let shippingMethods = params["shippingMethods"] as? NSArray ?? NSArray()
50
+
51
+ paymentRequest.requiredShippingContactFields = Set(requiredShippingAddressFields.map {
52
+ Mappers.mapToPKContactField(field: $0 as! String)
53
+ })
54
+
55
+ paymentRequest.requiredBillingContactFields = Set(requiredBillingContactFields.map {
56
+ Mappers.mapToPKContactField(field: $0 as! String)
57
+ })
58
+
59
+ paymentRequest.shippingMethods = ApplePayUtils.buildShippingMethods(items: shippingMethods as? [[String : Any]])
60
+
61
+ do {
62
+ paymentRequest.paymentSummaryItems = try ApplePayUtils
63
+ .buildPaymentSummaryItems(items: summaryItems as? [[String : Any]])
64
+ } catch {
65
+ return (Errors.createError(ErrorType.Failed, error.localizedDescription), nil)
66
+ }
67
+
68
+ if let capabilities = params["merchantCapabilities"] as? [String] {
69
+ for capability in capabilities {
70
+ paymentRequest.merchantCapabilities.update(with: ApplePayUtils.getMerchantCapabilityFrom(string: capability))
71
+ }
72
+ }
73
+
74
+ paymentRequest.shippingType = ApplePayUtils.getShippingTypeFrom(string: params["shippingType"] as? String)
75
+ if let supportedCountries = params["supportedCountries"] as? Set<String> {
76
+ paymentRequest.supportedCountries = supportedCountries
77
+ }
78
+ if #available(iOS 15.0, *) {
79
+ if (params["supportsCouponCode"] as? Bool == true) {
80
+ paymentRequest.supportsCouponCode = true
81
+ }
82
+ if let couponCode = params["couponCode"] as? String {
83
+ paymentRequest.supportsCouponCode = true
84
+ paymentRequest.couponCode = couponCode
85
+ }
86
+ }
87
+
88
+ return (nil, paymentRequest)
89
+ }
90
+
91
+ internal class func getMerchantCapabilityFrom(string: String?) -> PKMerchantCapability {
92
+ switch string {
93
+ case "supportsDebit":
94
+ return .capabilityDebit
95
+ case "supportsCredit":
96
+ return .capabilityCredit
97
+ case "supportsEMV":
98
+ return .capabilityEMV
99
+ case "supports3DS":
100
+ fallthrough
101
+ default:
102
+ return .capability3DS
103
+ }
104
+ }
105
+
106
+ internal class func getShippingTypeFrom(string: String?) -> PKShippingType {
107
+ switch string {
108
+ case "delivery":
109
+ return .delivery
110
+ case "storePickup":
111
+ return .storePickup
112
+ case "servicePickup":
113
+ return .servicePickup
114
+ case "shipping":
115
+ fallthrough
116
+ default:
117
+ return .shipping
118
+ }
119
+ }
120
+
13
121
  @available(iOS 15.0, *)
14
122
  internal class func createDeferredPaymentSummaryItem(item: [String : Any]) throws -> PKPaymentSummaryItem {
15
123
  let label = item["label"] as? String ?? ""
@@ -111,6 +219,79 @@ class ApplePayUtils {
111
219
  }
112
220
  }
113
221
 
222
+ public class func buildShippingMethods(items: [[String : Any]]?) -> [PKShippingMethod] {
223
+ var shippingMethods: [PKShippingMethod] = []
224
+ if let items = items {
225
+ for item in items {
226
+ let shippingMethod = buildShippingMethod(item: item)
227
+ shippingMethods.append(shippingMethod)
228
+ }
229
+ }
230
+
231
+ return shippingMethods
232
+ }
233
+
234
+ internal class func buildShippingMethod(item: [String : Any]) -> PKShippingMethod {
235
+ let label = item["label"] as? String ?? ""
236
+ let amount = NSDecimalNumber(string: item["amount"] as? String ?? "")
237
+ let shippingMethod = PKShippingMethod(
238
+ label: label,
239
+ amount: amount,
240
+ type: item["isPending"] as? Bool ?? false
241
+ ? PKPaymentSummaryItemType.pending : PKPaymentSummaryItemType.final
242
+ )
243
+ shippingMethod.detail = item["detail"] as? String ?? ""
244
+ shippingMethod.identifier = item["identifier"] as? String ?? ""
245
+ if #available(iOS 15.0, *) {
246
+ if let startDate = item["startDate"] as? Double, let endDate = item["endDate"] as? Double {
247
+ let startDate = Date(timeIntervalSince1970: startDate)
248
+ let endDate = Date(timeIntervalSince1970: endDate)
249
+ shippingMethod.dateComponentsRange = PKDateComponentsRange(
250
+ start: Calendar.current.dateComponents([.calendar, .year, .month, .day],
251
+ from: startDate),
252
+ end: Calendar.current.dateComponents([.calendar, .year, .month, .day],
253
+ from: endDate)
254
+ )
255
+ }
256
+ }
257
+ return shippingMethod
258
+ }
259
+
260
+ public class func buildApplePayErrors(errorItems: [NSDictionary]) throws -> (shippingAddressErrors: [Error], couponCodeErrors: [Error]) {
261
+ var shippingAddressErrors: [Error] = []
262
+ var couponCodeErrors: [Error] = []
263
+
264
+ for item in errorItems {
265
+ let type = item["errorType"] as? String
266
+ let message = item["message"] as? String
267
+ switch type {
268
+ case "InvalidShippingAddress":
269
+ let field = item["field"] as? String ?? "street"
270
+ shippingAddressErrors.append(PKPaymentRequest.paymentShippingAddressInvalidError(withKey: field, localizedDescription: message))
271
+ case "UnserviceableShippingAddress":
272
+ shippingAddressErrors.append(PKPaymentRequest.paymentShippingAddressUnserviceableError(withLocalizedDescription: message))
273
+ case "ExpiredCouponCode":
274
+ if #available(iOS 15.0, *) {
275
+ couponCodeErrors.append(PKPaymentRequest.paymentCouponCodeExpiredError(localizedDescription: message))
276
+ }
277
+ case "InvalidCouponCode":
278
+ if #available(iOS 15.0, *) {
279
+ couponCodeErrors.append(PKPaymentRequest.paymentCouponCodeInvalidError(localizedDescription: message))
280
+ }
281
+ default:
282
+ throw ApplePayUtilsError.invalidErrorType(String(describing: type))
283
+ }
284
+ }
285
+ return (shippingAddressErrors, couponCodeErrors)
286
+ }
287
+
288
+ internal class func mapToArrayOfPaymentNetworks(arrayOfStrings: [String]) throws -> [PKPaymentNetwork] {
289
+ let validNetworks: [PKPaymentNetwork?] = try arrayOfStrings.map { networkString in
290
+ return PKPaymentNetwork.init(rawValue: networkString)
291
+ }
292
+ return validNetworks.compactMap { $0 }
293
+ }
294
+
114
295
  public class func buildPaymentSheetApplePayConfig(
115
296
  merchantIdentifier: String?,
116
297
  merchantCountryCode: String?,
@@ -137,6 +318,8 @@ enum ApplePayUtilsError : Error, Equatable {
137
318
  case invalidCartSummaryItemType(String)
138
319
  case missingParameter(String, String)
139
320
  case invalidTimeInterval(String)
321
+ case invalidPaymentNetwork(String)
322
+ case invalidErrorType(String)
140
323
  case missingMerchantId
141
324
  case missingCountryCode
142
325
  }
@@ -150,6 +333,10 @@ extension ApplePayUtilsError: LocalizedError {
150
333
  return "Failed to create Apple Pay summary item with label: \(label). The \(parameter) item parameter is required, but none was provided."
151
334
  case .invalidTimeInterval(let providedInterval):
152
335
  return "Failed to create Apple Pay summary item. \(providedInterval) is not a valid timeInterval, must be one of: minute, hour, day, month, or year."
336
+ case .invalidPaymentNetwork(let network):
337
+ return "Failed to create Apple Pay summary item. \(network) is not a valid/supported payment network."
338
+ case .invalidErrorType(let type):
339
+ return "Error type: '\(type)' is not supported."
153
340
  case .missingMerchantId:
154
341
  return "`merchantIdentifier` is required, but none was found. Ensure you are passing this to initStripe your StripeProvider."
155
342
  case .missingCountryCode:
@@ -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
+ }
package/ios/Mappers.swift CHANGED
@@ -146,7 +146,7 @@ class Mappers {
146
146
  let tokenMap: NSDictionary = [
147
147
  "id": token.tokenId,
148
148
  "bankAccount": mapFromBankAccount(token.bankAccount) ?? NSNull(),
149
- "created": convertDateToUnixTimestamp(date: token.created) ?? NSNull(),
149
+ "created": convertDateToUnixTimestampMilliseconds(date: token.created) ?? NSNull(),
150
150
  "card": mapFromCard(token.card) ?? NSNull(),
151
151
  "livemode": token.livemode,
152
152
  "type": mapFromTokenType(token.type) ?? NSNull(),
@@ -180,13 +180,24 @@ class Mappers {
180
180
  }
181
181
 
182
182
  class func mapFromShippingMethod(shippingMethod: PKShippingMethod) -> NSDictionary {
183
- let method: NSDictionary = [
183
+ let method: NSMutableDictionary = [
184
184
  "detail": shippingMethod.detail ?? "",
185
185
  "identifier": shippingMethod.identifier ?? "",
186
186
  "amount": shippingMethod.amount.stringValue,
187
- "type": shippingMethod.type,
187
+ "isPending": shippingMethod.type == .pending,
188
188
  "label": shippingMethod.label
189
189
  ]
190
+
191
+ if #available(iOS 15.0, *) {
192
+ if let dateComponentsRange = shippingMethod.dateComponentsRange {
193
+ method.setObject(
194
+ convertDateToUnixTimestampSeconds(date: dateComponentsRange.startDateComponents.date) ?? NSNull(),
195
+ forKey: "startDate" as NSCopying)
196
+ method.setObject(
197
+ convertDateToUnixTimestampSeconds(date: dateComponentsRange.endDateComponents.date) ?? NSNull(),
198
+ forKey: "endDate" as NSCopying)
199
+ }
200
+ }
190
201
 
191
202
  return method
192
203
  }
@@ -372,7 +383,7 @@ class Mappers {
372
383
  "paymentMethodId": paymentIntent.paymentMethodId ?? NSNull(),
373
384
  "captureMethod": mapCaptureMethod(paymentIntent.captureMethod),
374
385
  "confirmationMethod": mapConfirmationMethod(paymentIntent.confirmationMethod),
375
- "created": convertDateToUnixTimestamp(date: paymentIntent.created) ?? NSNull(),
386
+ "created": convertDateToUnixTimestampMilliseconds(date: paymentIntent.created) ?? NSNull(),
376
387
  "amount": paymentIntent.amount,
377
388
  "lastPaymentError": NSNull(),
378
389
  "shipping": NSNull(),
@@ -397,7 +408,7 @@ class Mappers {
397
408
  }
398
409
 
399
410
  if let canceledAt = paymentIntent.canceledAt {
400
- intent.setValue(convertDateToUnixTimestamp(date: canceledAt), forKey: "canceledAt")
411
+ intent.setValue(convertDateToUnixTimestampMilliseconds(date: canceledAt), forKey: "canceledAt")
401
412
  }
402
413
 
403
414
  return intent;
@@ -718,7 +729,7 @@ class Mappers {
718
729
  }
719
730
 
720
731
  intent.setValue(types, forKey: "paymentMethodTypes")
721
- intent.setValue(convertDateToUnixTimestamp(date: setupIntent.created), forKey: "created")
732
+ intent.setValue(convertDateToUnixTimestampMilliseconds(date: setupIntent.created), forKey: "created")
722
733
 
723
734
  if let lastSetupError = setupIntent.lastSetupError {
724
735
  let setupError: NSMutableDictionary = [
@@ -928,13 +939,21 @@ class Mappers {
928
939
  return uiCustomization
929
940
  }
930
941
 
931
- class func convertDateToUnixTimestamp(date: Date?) -> String? {
942
+ class func convertDateToUnixTimestampMilliseconds(date: Date?) -> String? {
932
943
  if let date = date {
933
944
  let value = date.timeIntervalSince1970 * 1000.0
934
945
  return String(format: "%.0f", value)
935
946
  }
936
947
  return nil
937
948
  }
949
+
950
+ class func convertDateToUnixTimestampSeconds(date: Date?) -> String? {
951
+ if let date = date {
952
+ let value = date.timeIntervalSince1970
953
+ return String(format: "%.0f", value)
954
+ }
955
+ return nil
956
+ }
938
957
 
939
958
  class func mapFromCardValidationState(state: STPCardValidationState?) -> String {
940
959
  if let state = state {
@@ -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
+ }
@@ -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