@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,131 @@
1
+ //
2
+ // AddressSheetView.swift
3
+ // stripe-react-native
4
+ //
5
+ // Created by Charles Cruzan on 10/11/22.
6
+ //
7
+
8
+ import Foundation
9
+ import StripePaymentSheet
10
+
11
+ @objc(AddressSheetView)
12
+ class AddressSheetView: UIView {
13
+ @objc var visible = false
14
+ @objc var presentationStyle: String = "popover"
15
+ @objc var animationStyle: String = ""
16
+ @objc var appearance: NSDictionary? = nil
17
+ @objc var defaultValues: NSDictionary? = nil
18
+ @objc var additionalFields: NSDictionary? = nil
19
+ @objc var allowedCountries: [String] = []
20
+ @objc var autocompleteCountries: [String] = []
21
+ @objc var primaryButtonTitle: String? = nil
22
+ @objc var sheetTitle: String? = nil
23
+ @objc var onSubmitAction: RCTDirectEventBlock?
24
+ @objc var onErrorAction: RCTDirectEventBlock?
25
+
26
+ private var wasVisible = false
27
+ private var addressViewController: AddressViewController? = nil
28
+ internal var addressDetails: AddressViewController.AddressDetails? = nil
29
+
30
+ override init(frame: CGRect) {
31
+ super.init(frame: frame)
32
+ }
33
+
34
+ required init?(coder: NSCoder) {
35
+ fatalError("init(coder:) has not been implemented")
36
+ }
37
+
38
+ override func didSetProps(_ changedProps: [String]!) {
39
+ if (visible && !wasVisible) {
40
+ presentAddressSheet()
41
+ wasVisible = true
42
+ } else if (!visible && wasVisible) {
43
+ addressViewController?.dismiss(animated: true)
44
+ wasVisible = false
45
+ }
46
+ }
47
+
48
+ private func presentAddressSheet() {
49
+ if (STPAPIClient.shared.publishableKey == nil) {
50
+ onErrorAction!(
51
+ Errors.createError(ErrorType.Failed, "No publishable key set. Stripe has not been initialized. Initialize Stripe in your app with the StripeProvider component or the initStripe method.") as? [AnyHashable : Any]
52
+ )
53
+ return
54
+ }
55
+ var config: AddressViewController.Configuration
56
+ do {
57
+ config = try buildAddressSheetConfiguration()
58
+ } catch {
59
+ onErrorAction!(
60
+ Errors.createError(ErrorType.Failed, error.localizedDescription) as? [AnyHashable : Any]
61
+ )
62
+ return
63
+ }
64
+
65
+ self.addressViewController = AddressViewController(
66
+ configuration: config,
67
+ delegate: self
68
+ )
69
+
70
+ let navigationController = UINavigationController(rootViewController: addressViewController!)
71
+ navigationController.modalPresentationStyle = getModalPresentationStyle()
72
+ navigationController.modalTransitionStyle = getModalTransitionStyle()
73
+ let vc = findViewControllerPresenter(from: UIApplication.shared.delegate?.window??.rootViewController ?? UIViewController())
74
+ vc.present(navigationController, animated: true)
75
+ }
76
+
77
+ private func buildAddressSheetConfiguration() throws -> AddressViewController.Configuration {
78
+ let appearanceConfiguration = try PaymentSheetAppearance.buildAppearanceFromParams(userParams: appearance)
79
+
80
+ return AddressViewController.Configuration(
81
+ defaultValues: AddressSheetUtils.buildDefaultValues(params: defaultValues),
82
+ additionalFields: AddressSheetUtils.buildAdditionalFieldsConfiguration(params: additionalFields),
83
+ allowedCountries: allowedCountries,
84
+ appearance: appearanceConfiguration,
85
+ buttonTitle: primaryButtonTitle,
86
+ title: sheetTitle
87
+ )
88
+ }
89
+
90
+ private func getModalPresentationStyle() -> UIModalPresentationStyle {
91
+ switch (presentationStyle) {
92
+ case "fullscreen":
93
+ return .fullScreen
94
+ case "popover":
95
+ fallthrough
96
+ default:
97
+ return .popover
98
+ }
99
+ }
100
+
101
+ private func getModalTransitionStyle() -> UIModalTransitionStyle {
102
+ switch (animationStyle) {
103
+ case "flip":
104
+ return .flipHorizontal
105
+ case "curl":
106
+ return .partialCurl
107
+ case "dissolve":
108
+ return .crossDissolve
109
+ case "slide":
110
+ fallthrough
111
+ default:
112
+ return .coverVertical
113
+ }
114
+ }
115
+ }
116
+
117
+ extension AddressSheetView: AddressViewControllerDelegate {
118
+ func addressViewControllerDidFinish(_ addressViewController: AddressViewController, with address: AddressViewController.AddressDetails?) {
119
+ guard let address = address else {
120
+ onErrorAction!(
121
+ Errors.createError(
122
+ ErrorType.Canceled,
123
+ "The flow has been canceled."
124
+ ) as? [AnyHashable : Any]
125
+ )
126
+ return
127
+ }
128
+ self.addressDetails = address
129
+ onSubmitAction!(AddressSheetUtils.buildResult(address: address))
130
+ }
131
+ }
@@ -0,0 +1,25 @@
1
+ //
2
+ // AddressSheetViewManager.m
3
+ // stripe-react-native
4
+ //
5
+ // Created by Charles Cruzan on 10/11/22.
6
+ //
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import <React/RCTBridgeModule.h>
10
+ #import <React/RCTViewManager.h>
11
+
12
+ @interface RCT_EXTERN_MODULE(AddressSheetViewManager, RCTViewManager)
13
+ RCT_EXPORT_VIEW_PROPERTY(visible, BOOL)
14
+ RCT_EXPORT_VIEW_PROPERTY(presentationStyle, NSString)
15
+ RCT_EXPORT_VIEW_PROPERTY(animationStyle, NSString)
16
+ RCT_EXPORT_VIEW_PROPERTY(appearance, NSDictionary)
17
+ RCT_EXPORT_VIEW_PROPERTY(defaultValues, NSDictionary)
18
+ RCT_EXPORT_VIEW_PROPERTY(additionalFields, NSDictionary)
19
+ RCT_EXPORT_VIEW_PROPERTY(allowedCountries, NSArray)
20
+ RCT_EXPORT_VIEW_PROPERTY(autocompleteCountries, NSArray)
21
+ RCT_EXPORT_VIEW_PROPERTY(primaryButtonTitle, NSString)
22
+ RCT_EXPORT_VIEW_PROPERTY(sheetTitle, NSString)
23
+ RCT_EXPORT_VIEW_PROPERTY(onSubmitAction, RCTDirectEventBlock)
24
+ RCT_EXPORT_VIEW_PROPERTY(onErrorAction, RCTDirectEventBlock)
25
+ @end
@@ -0,0 +1,19 @@
1
+ //
2
+ // AddressSheetViewManager.swift
3
+ // stripe-react-native
4
+ //
5
+ // Created by Charles Cruzan on 10/11/22.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ @objc(AddressSheetViewManager)
11
+ class AddressSheetViewManager : RCTViewManager {
12
+ override func view() -> UIView! {
13
+ return AddressSheetView()
14
+ }
15
+
16
+ override class func requiresMainQueueSetup() -> Bool {
17
+ return true
18
+ }
19
+ }
@@ -7,4 +7,9 @@ RCT_EXPORT_VIEW_PROPERTY(onPressAction, RCTDirectEventBlock)
7
7
  RCT_EXPORT_VIEW_PROPERTY(type, NSNumber)
8
8
  RCT_EXPORT_VIEW_PROPERTY(buttonStyle, NSNumber)
9
9
  RCT_EXPORT_VIEW_PROPERTY(borderRadius, NSNumber)
10
+ RCT_EXPORT_VIEW_PROPERTY(disabled, BOOL)
11
+ RCT_EXPORT_VIEW_PROPERTY(onShippingMethodSelectedAction, RCTDirectEventBlock)
12
+ RCT_EXPORT_VIEW_PROPERTY(onShippingContactSelectedAction, RCTDirectEventBlock)
13
+ RCT_EXPORT_VIEW_PROPERTY(onCouponCodeEnteredAction, RCTDirectEventBlock)
14
+
10
15
  @end
@@ -3,7 +3,9 @@ import Foundation
3
3
  @objc(ApplePayButtonManager)
4
4
  class ApplePayButtonManager: RCTViewManager {
5
5
  override func view() -> UIView! {
6
- return ApplePayButtonView(frame: CGRect.init())
6
+ let view = ApplePayButtonView(frame: CGRect.init())
7
+ view.stripeSdk = bridge.module(forName: "StripeSdk") as? StripeSdk
8
+ return view
7
9
  }
8
10
 
9
11
  override class func requiresMainQueueSetup() -> Bool {
@@ -4,15 +4,35 @@ import UIKit
4
4
  @objc(ApplePayButtonView)
5
5
  class ApplePayButtonView: UIView {
6
6
  var applePayButton: PKPaymentButton?
7
+ var stripeSdk: StripeSdk?
7
8
 
8
9
  @objc var onPressAction: RCTDirectEventBlock?
10
+ @objc var onShippingMethodSelectedAction: RCTDirectEventBlock?
11
+ @objc var onShippingContactSelectedAction: RCTDirectEventBlock?
12
+ @objc var onCouponCodeEnteredAction: RCTDirectEventBlock?
13
+
9
14
  @objc var type: NSNumber?
10
15
  @objc var buttonStyle: NSNumber?
11
16
  @objc var borderRadius: NSNumber?
17
+ @objc var disabled = false
18
+
19
+ func doesNothing(_: Optional<Dictionary<AnyHashable, Any>>) {
20
+ return
21
+ }
12
22
 
13
23
  @objc func handleApplePayButtonTapped() {
14
24
  if onPressAction != nil {
15
25
  onPressAction!(["true": true])
26
+ // JS Callbacks are all no-ops since in legacy code (useApplePay hook),
27
+ // this behavior is controlled via the onDidSetShippingMethod and onDidSetShippingContact
28
+ // events
29
+ stripeSdk?.shippingMethodUpdateJSCallback = doesNothing
30
+ stripeSdk?.shippingContactUpdateJSCallback = doesNothing
31
+ stripeSdk?.couponCodeEnteredJSCallback = doesNothing
32
+ } else {
33
+ stripeSdk?.shippingMethodUpdateJSCallback = onShippingMethodSelectedAction
34
+ stripeSdk?.shippingContactUpdateJSCallback = onShippingContactSelectedAction
35
+ stripeSdk?.couponCodeEnteredJSCallback = onCouponCodeEnteredAction
16
36
  }
17
37
  }
18
38
 
@@ -28,6 +48,7 @@ class ApplePayButtonView: UIView {
28
48
  }
29
49
 
30
50
  if let applePayButton = self.applePayButton {
51
+ applePayButton.isEnabled = !disabled
31
52
  applePayButton.addTarget(self, action: #selector(handleApplePayButtonTapped), for: .touchUpInside)
32
53
  self.addSubview(applePayButton)
33
54
  }
@@ -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: