@stripe/stripe-react-native 0.64.0 → 0.64.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 (242) hide show
  1. package/README.md +2 -2
  2. package/android/build.gradle +2 -2
  3. package/android/detekt/detekt-baseline.xml +81 -0
  4. package/android/detekt/detekt.gradle +45 -0
  5. package/android/detekt/detekt.yml +722 -0
  6. package/android/gradle.properties +4 -4
  7. package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormView.kt +3 -1
  8. package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormViewManager.kt +2 -1
  9. package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +5 -1
  10. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementView.kt +26 -0
  11. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementViewManager.kt +42 -0
  12. package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementView.kt +105 -49
  13. package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementViewManager.kt +72 -12
  14. package/android/src/main/java/com/reactnativestripesdk/FinancialConnectionsSheetManager.kt +8 -4
  15. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonManager.kt +2 -1
  16. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +26 -11
  17. package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherManager.kt +2 -1
  18. package/android/src/main/java/com/reactnativestripesdk/NavigationBarView.kt +14 -5
  19. package/android/src/main/java/com/reactnativestripesdk/PaymentElementConfig.kt +6 -2
  20. package/android/src/main/java/com/reactnativestripesdk/PaymentLauncherManager.kt +2 -2
  21. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt +2 -1
  22. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodMessagingElementConfig.kt +7 -4
  23. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodMessagingElementViewManager.kt +2 -1
  24. package/android/src/main/java/com/reactnativestripesdk/PaymentOptionDisplayDataMapper.kt +8 -4
  25. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetAppearance.kt +9 -3
  26. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetManager.kt +110 -29
  27. package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +250 -12
  28. package/android/src/main/java/com/reactnativestripesdk/StripeSdkPackage.kt +1 -0
  29. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherManager.kt +2 -1
  30. package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetView.kt +3 -1
  31. package/android/src/main/java/com/reactnativestripesdk/customersheet/CustomerSheetManager.kt +6 -2
  32. package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerAdapter.kt +3 -1
  33. package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerSessionProvider.kt +2 -1
  34. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonManager.kt +2 -1
  35. package/android/src/main/java/com/reactnativestripesdk/utils/CheckoutAddressUpdate.kt +45 -0
  36. package/android/src/main/java/com/reactnativestripesdk/utils/CheckoutMappers.kt +101 -0
  37. package/android/src/main/java/com/reactnativestripesdk/utils/Errors.kt +4 -2
  38. package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +5 -1
  39. package/android/src/main/java/com/reactnativestripesdk/utils/Mappers.kt +29 -17
  40. package/android/src/main/java/com/reactnativestripesdk/utils/PostalCodeUtilities.kt +2 -1
  41. package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerDelegate.java +6 -0
  42. package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerInterface.java +2 -0
  43. package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerDelegate.java +35 -0
  44. package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerInterface.java +18 -0
  45. package/android/src/oldarch/java/com/reactnativestripesdk/NativeStripeSdkModuleSpec.java +44 -0
  46. package/android/src/test/java/com/reactnativestripesdk/PaymentMethodMessagingElementConfigTest.kt +3 -3
  47. package/android/src/test/java/com/reactnativestripesdk/mappers/MappersTest.kt +60 -0
  48. package/android/src/test/java/com/reactnativestripesdk/mappers/OnrampMappersTest.kt +38 -0
  49. package/android/src/test/java/com/reactnativestripesdk/mappers/PaymentOptionDisplayDataMapperTest.kt +9 -4
  50. package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutMappersTest.kt +89 -0
  51. package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutTestFixtures.java +49 -0
  52. package/ios/ConnectAccountOnboarding/ConnectAccountOnboardingViewController.swift +6 -8
  53. package/ios/CurrencySelectorElementManager.m +9 -0
  54. package/ios/CurrencySelectorElementManager.swift +12 -0
  55. package/ios/CurrencySelectorElementView.swift +24 -0
  56. package/ios/Mappers+Checkout.swift +193 -0
  57. package/ios/Mappers.swift +0 -5
  58. package/ios/NewArch/EmbeddedPaymentElementViewComponentView.mm +16 -2
  59. package/ios/NewArch/StripeCurrencySelectorElementComponentView.h +10 -0
  60. package/ios/NewArch/StripeCurrencySelectorElementComponentView.mm +75 -0
  61. package/ios/PaymentMethodMessagingElementConfig.swift +6 -3
  62. package/ios/PaymentMethodMessagingElementView.swift +19 -0
  63. package/ios/StripeSdk.mm +123 -0
  64. package/ios/StripeSdkImpl+Checkout.swift +308 -0
  65. package/ios/StripeSdkImpl+Embedded.swift +108 -27
  66. package/ios/StripeSdkImpl+PaymentSheet.swift +18 -2
  67. package/ios/StripeSdkImpl.swift +3 -93
  68. package/jest/mock.js +14 -1
  69. package/lib/commonjs/components/AddToWalletButton.js +1 -1
  70. package/lib/commonjs/components/AddToWalletButton.js.map +1 -1
  71. package/lib/commonjs/components/AddressSheet.js +1 -1
  72. package/lib/commonjs/components/AddressSheet.js.map +1 -1
  73. package/lib/commonjs/components/AuBECSDebitForm.js +1 -1
  74. package/lib/commonjs/components/AuBECSDebitForm.js.map +1 -1
  75. package/lib/commonjs/components/CardField.js +1 -1
  76. package/lib/commonjs/components/CardField.js.map +1 -1
  77. package/lib/commonjs/components/CardForm.js +1 -1
  78. package/lib/commonjs/components/CardForm.js.map +1 -1
  79. package/lib/commonjs/components/CurrencySelectorElement.js +2 -0
  80. package/lib/commonjs/components/CurrencySelectorElement.js.map +1 -0
  81. package/lib/commonjs/components/PaymentMethodMessagingElement.js +2 -0
  82. package/lib/commonjs/components/PaymentMethodMessagingElement.js.map +1 -0
  83. package/lib/commonjs/components/PlatformPayButton.js +1 -1
  84. package/lib/commonjs/components/PlatformPayButton.js.map +1 -1
  85. package/lib/commonjs/components/StripeContainer.js +1 -1
  86. package/lib/commonjs/components/StripeContainer.js.map +1 -1
  87. package/lib/commonjs/connect/Components.js +1 -1
  88. package/lib/commonjs/connect/Components.js.map +1 -1
  89. package/lib/commonjs/connect/ConnectComponentsProvider.js +1 -1
  90. package/lib/commonjs/connect/ConnectComponentsProvider.js.map +1 -1
  91. package/lib/commonjs/connect/EmbeddedComponent.js +1 -1
  92. package/lib/commonjs/connect/EmbeddedComponent.js.map +1 -1
  93. package/lib/commonjs/connect/ModalCloseButton.js +1 -1
  94. package/lib/commonjs/connect/ModalCloseButton.js.map +1 -1
  95. package/lib/commonjs/connect/NavigationBar.js +1 -1
  96. package/lib/commonjs/connect/NavigationBar.js.map +1 -1
  97. package/lib/commonjs/events.js.map +1 -1
  98. package/lib/commonjs/functions.js +1 -1
  99. package/lib/commonjs/functions.js.map +1 -1
  100. package/lib/commonjs/helpers.js +1 -1
  101. package/lib/commonjs/hooks/useCheckout.js +2 -0
  102. package/lib/commonjs/hooks/useCheckout.js.map +1 -0
  103. package/lib/commonjs/hooks/useOnramp.js +1 -1
  104. package/lib/commonjs/hooks/useOnramp.js.map +1 -1
  105. package/lib/commonjs/index.js +1 -1
  106. package/lib/commonjs/index.js.map +1 -1
  107. package/lib/commonjs/specs/NativeAddToWalletButton.js +1 -1
  108. package/lib/commonjs/specs/NativeAddressSheet.js +1 -1
  109. package/lib/commonjs/specs/NativeApplePayButton.js +1 -1
  110. package/lib/commonjs/specs/NativeAuBECSDebitForm.js +1 -1
  111. package/lib/commonjs/specs/NativeCardField.js +1 -1
  112. package/lib/commonjs/specs/NativeCardField.js.map +1 -1
  113. package/lib/commonjs/specs/NativeCardForm.js +1 -1
  114. package/lib/commonjs/specs/NativeCardForm.js.map +1 -1
  115. package/lib/commonjs/specs/NativeConnectAccountOnboardingView.js +1 -1
  116. package/lib/commonjs/specs/NativeCurrencySelectorElement.js +2 -0
  117. package/lib/commonjs/specs/NativeCurrencySelectorElement.js.map +1 -0
  118. package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js +1 -1
  119. package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js.map +1 -1
  120. package/lib/commonjs/specs/NativeGooglePayButton.js +1 -1
  121. package/lib/commonjs/specs/NativeNavigationBar.js +1 -1
  122. package/lib/commonjs/specs/NativePaymentMethodMessagingElement.js +1 -1
  123. package/lib/commonjs/specs/NativePaymentMethodMessagingElement.js.map +1 -1
  124. package/lib/commonjs/specs/NativeStripeContainer.js +1 -1
  125. package/lib/commonjs/specs/NativeStripeSdkModule.js.map +1 -1
  126. package/lib/commonjs/types/Checkout.js +2 -0
  127. package/lib/commonjs/types/Checkout.js.map +1 -0
  128. package/lib/commonjs/types/EmbeddedPaymentElement.js +1 -1
  129. package/lib/commonjs/types/EmbeddedPaymentElement.js.map +1 -1
  130. package/lib/commonjs/types/PaymentSheet.js.map +1 -1
  131. package/lib/module/components/AddToWalletButton.js +1 -1
  132. package/lib/module/components/AddToWalletButton.js.map +1 -1
  133. package/lib/module/components/AddressSheet.js +1 -1
  134. package/lib/module/components/AddressSheet.js.map +1 -1
  135. package/lib/module/components/AuBECSDebitForm.js +1 -1
  136. package/lib/module/components/AuBECSDebitForm.js.map +1 -1
  137. package/lib/module/components/CardField.js +1 -1
  138. package/lib/module/components/CardField.js.map +1 -1
  139. package/lib/module/components/CardForm.js +1 -1
  140. package/lib/module/components/CardForm.js.map +1 -1
  141. package/lib/module/components/CurrencySelectorElement.js +2 -0
  142. package/lib/module/components/CurrencySelectorElement.js.map +1 -0
  143. package/lib/module/components/PaymentMethodMessagingElement.js +2 -0
  144. package/lib/module/components/PaymentMethodMessagingElement.js.map +1 -0
  145. package/lib/module/components/PlatformPayButton.js +1 -1
  146. package/lib/module/components/PlatformPayButton.js.map +1 -1
  147. package/lib/module/components/StripeContainer.js +1 -1
  148. package/lib/module/components/StripeContainer.js.map +1 -1
  149. package/lib/module/connect/Components.js +1 -1
  150. package/lib/module/connect/Components.js.map +1 -1
  151. package/lib/module/connect/ConnectComponentsProvider.js +1 -1
  152. package/lib/module/connect/ConnectComponentsProvider.js.map +1 -1
  153. package/lib/module/connect/EmbeddedComponent.js +1 -1
  154. package/lib/module/connect/EmbeddedComponent.js.map +1 -1
  155. package/lib/module/connect/ModalCloseButton.js +1 -1
  156. package/lib/module/connect/ModalCloseButton.js.map +1 -1
  157. package/lib/module/connect/NavigationBar.js +1 -1
  158. package/lib/module/connect/NavigationBar.js.map +1 -1
  159. package/lib/module/events.js.map +1 -1
  160. package/lib/module/functions.js +1 -1
  161. package/lib/module/functions.js.map +1 -1
  162. package/lib/module/helpers.js +1 -1
  163. package/lib/module/hooks/useCheckout.js +2 -0
  164. package/lib/module/hooks/useCheckout.js.map +1 -0
  165. package/lib/module/hooks/useOnramp.js +1 -1
  166. package/lib/module/hooks/useOnramp.js.map +1 -1
  167. package/lib/module/index.js +1 -1
  168. package/lib/module/index.js.map +1 -1
  169. package/lib/module/specs/NativeAddToWalletButton.js +1 -1
  170. package/lib/module/specs/NativeAddressSheet.js +1 -1
  171. package/lib/module/specs/NativeApplePayButton.js +1 -1
  172. package/lib/module/specs/NativeAuBECSDebitForm.js +1 -1
  173. package/lib/module/specs/NativeCardField.js +1 -1
  174. package/lib/module/specs/NativeCardField.js.map +1 -1
  175. package/lib/module/specs/NativeCardForm.js +1 -1
  176. package/lib/module/specs/NativeCardForm.js.map +1 -1
  177. package/lib/module/specs/NativeConnectAccountOnboardingView.js +1 -1
  178. package/lib/module/specs/NativeCurrencySelectorElement.js +2 -0
  179. package/lib/module/specs/NativeCurrencySelectorElement.js.map +1 -0
  180. package/lib/module/specs/NativeEmbeddedPaymentElement.js +1 -1
  181. package/lib/module/specs/NativeEmbeddedPaymentElement.js.map +1 -1
  182. package/lib/module/specs/NativeGooglePayButton.js +1 -1
  183. package/lib/module/specs/NativeNavigationBar.js +1 -1
  184. package/lib/module/specs/NativePaymentMethodMessagingElement.js +1 -1
  185. package/lib/module/specs/NativePaymentMethodMessagingElement.js.map +1 -1
  186. package/lib/module/specs/NativeStripeContainer.js +1 -1
  187. package/lib/module/specs/NativeStripeSdkModule.js.map +1 -1
  188. package/lib/module/types/Checkout.js +2 -0
  189. package/lib/module/types/Checkout.js.map +1 -0
  190. package/lib/module/types/EmbeddedPaymentElement.js +1 -1
  191. package/lib/module/types/EmbeddedPaymentElement.js.map +1 -1
  192. package/lib/module/types/PaymentSheet.js.map +1 -1
  193. package/lib/typescript/src/components/CurrencySelectorElement.d.ts +62 -0
  194. package/lib/typescript/src/components/CurrencySelectorElement.d.ts.map +1 -0
  195. package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts +41 -0
  196. package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts.map +1 -0
  197. package/lib/typescript/src/events.d.ts +11 -0
  198. package/lib/typescript/src/events.d.ts.map +1 -1
  199. package/lib/typescript/src/functions.d.ts.map +1 -1
  200. package/lib/typescript/src/hooks/useCheckout.d.ts +21 -0
  201. package/lib/typescript/src/hooks/useCheckout.d.ts.map +1 -0
  202. package/lib/typescript/src/hooks/useOnramp.d.ts +1 -0
  203. package/lib/typescript/src/hooks/useOnramp.d.ts.map +1 -1
  204. package/lib/typescript/src/index.d.ts +3 -0
  205. package/lib/typescript/src/index.d.ts.map +1 -1
  206. package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts +25 -0
  207. package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts.map +1 -0
  208. package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts +5 -1
  209. package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts.map +1 -1
  210. package/lib/typescript/src/specs/NativePaymentMethodMessagingElement.d.ts +1 -6
  211. package/lib/typescript/src/specs/NativePaymentMethodMessagingElement.d.ts.map +1 -1
  212. package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +16 -1
  213. package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts.map +1 -1
  214. package/lib/typescript/src/types/Checkout.d.ts +336 -0
  215. package/lib/typescript/src/types/Checkout.d.ts.map +1 -0
  216. package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts +36 -1
  217. package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts.map +1 -1
  218. package/lib/typescript/src/types/PaymentMethod.d.ts +1 -5
  219. package/lib/typescript/src/types/PaymentMethod.d.ts.map +1 -1
  220. package/lib/typescript/src/types/PaymentSheet.d.ts +22 -6
  221. package/lib/typescript/src/types/PaymentSheet.d.ts.map +1 -1
  222. package/lib/typescript/src/types/components/PaymentMethodMessagingElementComponent.d.ts +16 -1
  223. package/lib/typescript/src/types/components/PaymentMethodMessagingElementComponent.d.ts.map +1 -1
  224. package/package.json +21 -7
  225. package/src/components/CurrencySelectorElement.tsx +95 -0
  226. package/src/components/PaymentMethodMessagingElement.tsx +109 -0
  227. package/src/events.ts +11 -0
  228. package/src/functions.ts +30 -1
  229. package/src/hooks/useCheckout.tsx +207 -0
  230. package/src/hooks/useOnramp.tsx +9 -3
  231. package/src/index.tsx +4 -0
  232. package/src/specs/NativeCurrencySelectorElement.ts +35 -0
  233. package/src/specs/NativeEmbeddedPaymentElement.ts +12 -2
  234. package/src/specs/NativePaymentMethodMessagingElement.ts +0 -7
  235. package/src/specs/NativeStripeSdkModule.ts +58 -1
  236. package/src/types/Checkout.ts +377 -0
  237. package/src/types/EmbeddedPaymentElement.tsx +117 -26
  238. package/src/types/PaymentMethod.ts +0 -6
  239. package/src/types/PaymentSheet.ts +29 -6
  240. package/src/types/components/PaymentMethodMessagingElementComponent.tsx +17 -1
  241. package/stripe-react-native.podspec +8 -8
  242. package/android/spotless.gradle +0 -19
@@ -13,6 +13,7 @@ import type {
13
13
  CardBrand,
14
14
  } from './Common';
15
15
  import type { PaymentMethod } from '.';
16
+ import type { Checkout } from './Checkout';
16
17
  import type * as ConfirmationToken from './ConfirmationToken';
17
18
  import * as PaymentSheetTypes from './PaymentSheet';
18
19
  import NativeStripeSdkModule from '../specs/NativeStripeSdkModule';
@@ -222,21 +223,38 @@ export interface EmbeddedPaymentElementConfiguration {
222
223
  opensCardScannerAutomatically?: boolean;
223
224
  }
224
225
 
226
+ // Narrows a value to `Checkout` vs. `IntentConfiguration`.
227
+ const isCheckoutSession = (
228
+ value: PaymentSheetTypes.IntentConfiguration | Checkout
229
+ ): value is Checkout =>
230
+ typeof value === 'object' &&
231
+ value !== null &&
232
+ 'sessionKey' in value &&
233
+ !('mode' in value);
234
+
225
235
  // -----------------------------------------------------------------------------
226
236
  // Embedded API
227
237
  // -----------------------------------------------------------------------------
228
238
 
229
239
  class EmbeddedPaymentElement {
230
240
  /**
231
- * Call this when the intent configuration changes (e.g., amount or currency).
241
+ * Call this when the intent configuration or Checkout Session changes.
232
242
  * Cancels any in-progress update. Ensures the correct payment methods are shown and fields are collected.
233
243
  * If the selected payment option becomes invalid, it may be cleared.
234
244
  * Returns the final result of the update; earlier in-flight updates will return `{ status: 'canceled' }`.
235
245
  */
236
- async update(intentConfig: PaymentSheetTypes.IntentConfiguration) {
237
- const result =
238
- await NativeStripeSdkModule.updateEmbeddedPaymentElement(intentConfig);
239
- return result;
246
+ async updateIntent(
247
+ intentConfig: PaymentSheetTypes.IntentConfiguration
248
+ ): Promise<unknown> {
249
+ return await NativeStripeSdkModule.updateEmbeddedPaymentElement(
250
+ intentConfig
251
+ );
252
+ }
253
+
254
+ async updateCheckout(checkout: Checkout): Promise<unknown> {
255
+ return await NativeStripeSdkModule.updateEmbeddedPaymentElementWithCheckout(
256
+ checkout.sessionKey
257
+ );
240
258
  }
241
259
 
242
260
  /**
@@ -268,21 +286,28 @@ let customPaymentMethodConfirmCallback: EventSubscription | null = null;
268
286
  let rowSelectionCallback: EventSubscription | null = null;
269
287
 
270
288
  async function createEmbeddedPaymentElement(
271
- intentConfig: PaymentSheetTypes.IntentConfiguration,
289
+ intent: PaymentSheetTypes.IntentConfiguration | Checkout,
272
290
  configuration: EmbeddedPaymentElementConfiguration
273
291
  ): Promise<EmbeddedPaymentElement> {
274
- setupConfirmAndSelectionHandlers(intentConfig, configuration);
292
+ setupConfigurationHandlers(configuration);
275
293
 
276
- await NativeStripeSdkModule.createEmbeddedPaymentElement(
277
- intentConfig,
278
- configuration
279
- );
294
+ if (isCheckoutSession(intent)) {
295
+ await NativeStripeSdkModule.createEmbeddedPaymentElementWithCheckout(
296
+ intent.sessionKey,
297
+ configuration
298
+ );
299
+ } else {
300
+ setupIntentConfirmHandlers(intent);
301
+ await NativeStripeSdkModule.createEmbeddedPaymentElement(
302
+ intent,
303
+ configuration
304
+ );
305
+ }
280
306
  return new EmbeddedPaymentElement();
281
307
  }
282
308
 
283
- function setupConfirmAndSelectionHandlers(
284
- intentConfig: PaymentSheetTypes.IntentConfiguration,
285
- configuration: EmbeddedPaymentElementConfiguration
309
+ function setupIntentConfirmHandlers(
310
+ intentConfig: PaymentSheetTypes.IntentConfiguration
286
311
  ) {
287
312
  const confirmHandler = intentConfig.confirmHandler;
288
313
  if (confirmHandler) {
@@ -323,7 +348,11 @@ function setupConfirmAndSelectionHandlers(
323
348
  }
324
349
  );
325
350
  }
351
+ }
326
352
 
353
+ function setupConfigurationHandlers(
354
+ configuration: EmbeddedPaymentElementConfiguration
355
+ ) {
327
356
  if (configuration.formSheetAction?.type === 'confirm') {
328
357
  const confirmFormSheetHandler =
329
358
  configuration.formSheetAction.onFormSheetConfirmComplete;
@@ -409,7 +438,16 @@ export interface UseEmbeddedPaymentElementResult {
409
438
  * @note Upon completion, `paymentOption` may become null if it's no longer available.
410
439
  * @note If you call `update` while a previous call to `update` is still in progress, the previous call is canceled.
411
440
  */
412
- update: (intentConfig: PaymentSheetTypes.IntentConfiguration) => void;
441
+ update: {
442
+ (intentConfig: PaymentSheetTypes.IntentConfiguration): void;
443
+ /**
444
+ * Call this method when the Checkout Session values you used to initialize
445
+ * `EmbeddedPaymentElement` change.
446
+ * @checkoutSessionsPreview
447
+ * @internal
448
+ */
449
+ (checkout: Checkout): void;
450
+ };
413
451
  // Sets the currently selected payment option to null
414
452
  clearPaymentOption: () => void;
415
453
  // Any error encountered during creation/update, or null
@@ -429,6 +467,38 @@ export interface UseEmbeddedPaymentElementResult {
429
467
  export function useEmbeddedPaymentElement(
430
468
  intentConfig: PaymentSheetTypes.IntentConfiguration,
431
469
  configuration: EmbeddedPaymentElementConfiguration
470
+ ): UseEmbeddedPaymentElementResult;
471
+ /**
472
+ * Initializes an `EmbeddedPaymentElement` from a Stripe Checkout Session.
473
+ *
474
+ * Pass a loaded handle from `useCheckout`. Render the consumer in a child
475
+ * component so the hook only runs once `state.status === 'loaded'`.
476
+ *
477
+ * @example
478
+ * function Cart() {
479
+ * const { checkout, state } = useCheckout(clientSecret);
480
+ * if (state?.status !== 'loaded') return null;
481
+ * return <EmbeddedCheckout checkout={checkout} />;
482
+ * }
483
+ *
484
+ * function EmbeddedCheckout({ checkout }: { checkout: Checkout }) {
485
+ * const { embeddedPaymentElementView } =
486
+ * useEmbeddedPaymentElement(checkout, configuration);
487
+ * return embeddedPaymentElementView;
488
+ * }
489
+ *
490
+ * @param checkout - A loaded `Checkout` handle from `useCheckout`.
491
+ * @param configuration - Configuration for the embedded element.
492
+ * @checkoutSessionsPreview
493
+ * @internal
494
+ */
495
+ export function useEmbeddedPaymentElement(
496
+ checkout: Checkout,
497
+ configuration: EmbeddedPaymentElementConfiguration
498
+ ): UseEmbeddedPaymentElementResult;
499
+ export function useEmbeddedPaymentElement(
500
+ intent: PaymentSheetTypes.IntentConfiguration | Checkout,
501
+ configuration: EmbeddedPaymentElementConfiguration
432
502
  ): UseEmbeddedPaymentElementResult {
433
503
  const isAndroid = Platform.OS === 'android';
434
504
  const elementRef = useRef<EmbeddedPaymentElement | null>(null);
@@ -454,12 +524,18 @@ export function useEmbeddedPaymentElement(
454
524
  return ref.current;
455
525
  }
456
526
 
527
+ // Re-key on the session key (Checkout) or intent object so we only
528
+ // recreate the element when the source actually changes.
529
+ const intentKey = isCheckoutSession(intent) ? intent.sessionKey : intent;
530
+ const intentRef = useRef(intent);
531
+ intentRef.current = intent;
532
+
457
533
  // Create embedded payment element
458
534
  useEffect(() => {
459
535
  let active = true;
460
536
  (async () => {
461
537
  const el = await createEmbeddedPaymentElement(
462
- intentConfig,
538
+ intentRef.current,
463
539
  configuration
464
540
  );
465
541
  if (!active) return;
@@ -471,7 +547,7 @@ export function useEmbeddedPaymentElement(
471
547
  elementRef.current = null;
472
548
  setElement(null);
473
549
  };
474
- }, [intentConfig, configuration, viewRef, isAndroid]);
550
+ }, [intentKey, configuration, viewRef, isAndroid]);
475
551
 
476
552
  useEffect(() => {
477
553
  const sub = addListener(
@@ -509,13 +585,19 @@ export function useEmbeddedPaymentElement(
509
585
 
510
586
  // Render the embedded view
511
587
  const embeddedPaymentElementView = useMemo(() => {
512
- if (isAndroid && configuration && intentConfig) {
588
+ // `intentKey` is the session key string for Checkout, the IntentConfiguration object otherwise.
589
+ const intentProps =
590
+ typeof intentKey === 'string'
591
+ ? { checkout: { sessionKey: intentKey } }
592
+ : { intentConfiguration: intentKey };
593
+
594
+ if (isAndroid && configuration && intentKey) {
513
595
  return (
514
596
  <NativeEmbeddedPaymentElement
515
597
  ref={viewRef}
516
598
  style={[{ width: '100%', height: height }]}
517
599
  configuration={configuration}
518
- intentConfiguration={intentConfig}
600
+ {...intentProps}
519
601
  />
520
602
  );
521
603
  }
@@ -525,10 +607,10 @@ export function useEmbeddedPaymentElement(
525
607
  ref={viewRef}
526
608
  style={{ width: '100%', height }}
527
609
  configuration={configuration}
528
- intentConfiguration={intentConfig}
610
+ {...intentProps}
529
611
  />
530
612
  );
531
- }, [configuration, element, height, intentConfig, isAndroid]);
613
+ }, [configuration, element, height, intentKey, isAndroid]);
532
614
 
533
615
  // Other APIs
534
616
  const confirm = useCallback((): Promise<EmbeddedPaymentElementResult> => {
@@ -560,19 +642,25 @@ export function useEmbeddedPaymentElement(
560
642
  return getElementOrThrow(elementRef).confirm();
561
643
  }, [isAndroid]);
562
644
  const update = useCallback(
563
- (cfg: PaymentSheetTypes.IntentConfiguration) => {
645
+ (
646
+ updateSource: PaymentSheetTypes.IntentConfiguration | Checkout
647
+ ): Promise<unknown> => {
564
648
  if (isAndroid) {
565
649
  const currentRef = viewRef.current;
566
650
  if (currentRef) {
567
- return new Promise<{ status: string } | null>((resolve) => {
651
+ return new Promise((resolve) => {
568
652
  const sub = addListener(
569
653
  'embeddedPaymentElementUpdateComplete',
570
- (result: { status: string } | null) => {
654
+ (result) => {
571
655
  sub.remove();
572
656
  resolve(result);
573
657
  }
574
658
  );
575
- Commands.update(currentRef, JSON.stringify(cfg));
659
+ if (isCheckoutSession(updateSource)) {
660
+ Commands.updateWithCheckout(currentRef, updateSource.sessionKey);
661
+ } else {
662
+ Commands.update(currentRef, JSON.stringify(updateSource));
663
+ }
576
664
  });
577
665
  }
578
666
  return Promise.reject(
@@ -581,7 +669,10 @@ export function useEmbeddedPaymentElement(
581
669
  }
582
670
 
583
671
  // iOS: use native module directly
584
- return getElementOrThrow(elementRef).update(cfg);
672
+ const embeddedElement = getElementOrThrow(elementRef);
673
+ return isCheckoutSession(updateSource)
674
+ ? embeddedElement.updateCheckout(updateSource)
675
+ : embeddedElement.updateIntent(updateSource);
585
676
  },
586
677
  [isAndroid]
587
678
  );
@@ -20,7 +20,6 @@ export interface Result {
20
20
  Fpx: FpxResult;
21
21
  Ideal: IdealResult;
22
22
  SepaDebit: SepaDebitResult;
23
- Upi: UpiResult;
24
23
  USBankAccount: USBankAccountResult;
25
24
  }
26
25
 
@@ -254,10 +253,6 @@ export interface SepaDebitResult {
254
253
  last4?: string;
255
254
  }
256
255
 
257
- export interface UpiResult {
258
- vpa?: string;
259
- }
260
-
261
256
  export type USBankAccountResult = {
262
257
  routingNumber?: string;
263
258
  accountHolderType?: BankAcccountHolderType;
@@ -286,7 +281,6 @@ export type Type =
286
281
  | 'Bancontact'
287
282
  | 'Multibanco'
288
283
  | 'Oxxo'
289
- | 'Upi'
290
284
  | 'USBankAccount'
291
285
  | 'PayPal'
292
286
  | 'Unknown';
@@ -15,6 +15,7 @@ import type { FutureUsage } from './PaymentIntent';
15
15
  import type { Result } from './PaymentMethod';
16
16
  import type { StripeError } from './Errors';
17
17
  import type { Result as ConfirmationTokenResult } from './ConfirmationToken';
18
+ import type { Checkout } from './Checkout';
18
19
 
19
20
  export type SetupParamsBase = IntentParams & {
20
21
  /** Your customer-facing business name. On Android, this is required and cannot be an empty string. */
@@ -46,7 +47,7 @@ export type SetupParamsBase = IntentParams & {
46
47
  defaultShippingDetails?: AddressDetails;
47
48
  /** If true, allows payment methods that do not move money at the end of the checkout. Defaults to false.
48
49
  *
49
- * Some payment methods cant guarantee you will receive funds from your customer at the end of the checkout
50
+ * Some payment methods can't guarantee you will receive funds from your customer at the end of the checkout
50
51
  * because they take time to settle (eg. most bank debits, like SEPA or ACH) or require customer action to
51
52
  * complete (e.g. OXXO, Konbini, Boleto). If this is set to true, make sure your integration listens to webhooks
52
53
  * for notifications on whether a payment has succeeded or not.
@@ -65,7 +66,7 @@ export type SetupParamsBase = IntentParams & {
65
66
  * You can override the default order in which payment methods are displayed in PaymentSheet with a list of payment method types.
66
67
  * See https://stripe.com/docs/api/payment_methods/object#payment_method_object-type for the list of valid types. You may also pass external payment methods.
67
68
  * - Example: ["card", "external_paypal", "klarna"]
68
- * - Note: If you omit payment methods from this list, theyll be automatically ordered by Stripe after the ones you provide. Invalid payment methods are ignored.
69
+ * - Note: If you omit payment methods from this list, they'll be automatically ordered by Stripe after the ones you provide. Invalid payment methods are ignored.
69
70
  */
70
71
  paymentMethodOrder?: Array<String>;
71
72
  /** This is an experimental feature that may be removed at any time.
@@ -112,9 +113,30 @@ export type SetupParamsBase = IntentParams & {
112
113
  };
113
114
  };
114
115
 
116
+ /**
117
+ * Parameters for initializing PaymentSheet from a Checkout Session.
118
+ * Use when you have called `useCheckout` and the state is `loaded`.
119
+ * @checkoutSessionsPreview
120
+ * @internal
121
+ */
122
+ export type CheckoutSetupParams = {
123
+ /** A fully loaded Checkout instance whose `state.status` is `'loaded'`. */
124
+ checkout: Checkout;
125
+ paymentIntentClientSecret?: never;
126
+ setupIntentClientSecret?: never;
127
+ intentConfiguration?: never;
128
+ customerEphemeralKeySecret?: never;
129
+ customerSessionClientSecret?: never;
130
+ } & Omit<
131
+ SetupParamsBase,
132
+ | 'paymentIntentClientSecret'
133
+ | 'setupIntentClientSecret'
134
+ | 'intentConfiguration'
135
+ >;
136
+
115
137
  export type SetupParams =
116
138
  | (SetupParamsBase & {
117
- /** A short-lived token that allows the SDK to access a Customers payment methods. */
139
+ /** A short-lived token that allows the SDK to access a Customer's payment methods. */
118
140
  customerEphemeralKeySecret: string;
119
141
  customerSessionClientSecret?: never;
120
142
  })
@@ -123,7 +145,8 @@ export type SetupParams =
123
145
  /** The client secret of this Customer Session. Used on the client to set up secure access to the given customer. */
124
146
  customerSessionClientSecret: string;
125
147
  })
126
- | SetupParamsBase;
148
+ | SetupParamsBase
149
+ | CheckoutSetupParams;
127
150
 
128
151
  export type IntentParams =
129
152
  | {
@@ -406,7 +429,7 @@ export type PrimaryButtonColorConfig = {
406
429
  successTextColor?: ThemedColor;
407
430
  };
408
431
 
409
- /** A color thats either a single hex or a light/dark pair */
432
+ /** A color that's either a single hex or a light/dark pair */
410
433
  export type ThemedColor = string | { light: string; dark: string };
411
434
 
412
435
  /** Represents edge insets */
@@ -649,7 +672,7 @@ export type Mode = PaymentMode | SetupMode;
649
672
  export enum CaptureMethod {
650
673
  /** (Default) Stripe automatically captures funds when the customer authorizes the payment. */
651
674
  Automatic = 'Automatic',
652
- /** Place a hold on the funds when the customer authorizes the payment, but dont capture the funds until later. (Not all payment methods support this.) */
675
+ /** Place a hold on the funds when the customer authorizes the payment, but don't capture the funds until later. (Not all payment methods support this.) */
653
676
  Manual = 'Manual',
654
677
  /** Asynchronously capture funds when the customer authorizes the payment.
655
678
  - Note: Recommended over `CaptureMethod.Automatic` due to improved latency, but may require additional integration changes.
@@ -25,9 +25,25 @@ export enum PaymentMethodMessagingElementStyle {
25
25
  Light = 'light',
26
26
  }
27
27
 
28
+ export interface PaymentMethodMessagingElementFont {
29
+ /**
30
+ * The font used for the element text.
31
+ *
32
+ * On iOS, this should be the "PostScript name" found in Font Book after installing the font.
33
+ * On Android, this should be the name of the font file (containing only lowercase alphanumeric characters) in android/app/src/main/res/font
34
+ *
35
+ * @default The OS's system font
36
+ */
37
+ family?: string;
38
+ /** The font size for text in the element. This value is required to be greater than 0.
39
+ * @default The OS's default text size.
40
+ */
41
+ size?: number;
42
+ }
43
+
28
44
  export interface PaymentMethodMessagingElementAppearance {
29
45
  /** Font settings for the element. */
30
- font?: PaymentSheetTypes.FontConfig;
46
+ font?: PaymentMethodMessagingElementFont;
31
47
  /** The color used for the element text. */
32
48
  textColor?: PaymentSheetTypes.ThemedColor;
33
49
  /** The color used for the text that links to available BNPL plans. */
@@ -2,7 +2,7 @@ require 'json'
2
2
 
3
3
  package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
4
4
  # Keep stripe_version in sync with https://github.com/stripe/stripe-identity-react-native/blob/main/stripe-identity-react-native.podspec
5
- stripe_version = '~> 25.11.0'
5
+ stripe_version = '~> 25.12.0'
6
6
 
7
7
  fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
8
8
 
@@ -17,13 +17,6 @@ Pod::Spec.new do |s|
17
17
  s.platforms = { ios: '13.0' }
18
18
  s.source = { git: 'https://github.com/stripe/stripe-react-native.git', tag: s.version.to_s }
19
19
 
20
- s.source_files = 'ios/**/*.{h,m,mm,swift}'
21
- s.exclude_files = [ 'ios/Tests/', 'ios/NewArch/' ]
22
- # These headers contain c++ code so make sure they are private to avoid
23
- # being exported to the umbrella header, which is used by swift interop.
24
- # StripeSwiftInterop.h will cause circular dependency issues.
25
- s.private_header_files = [ 'ios/StripeSdk.h', 'ios/StripeSwiftInterop.h' ]
26
-
27
20
  s.header_dir = 'stripe_react_native'
28
21
  s.pod_target_xcconfig = {
29
22
  'USE_HEADERMAP' => 'YES',
@@ -44,6 +37,12 @@ Pod::Spec.new do |s|
44
37
  end
45
38
 
46
39
  s.subspec 'Core' do |core|
40
+ core.source_files = 'ios/**/*.{h,m,mm,swift}'
41
+ core.exclude_files = [ 'ios/Tests/', 'ios/NewArch/', 'ios/StripeOnrampSdk.h', 'ios/StripeOnrampSdk.mm' ]
42
+ # These headers contain c++ code so make sure they are private to avoid
43
+ # being exported to the umbrella header, which is used by swift interop.
44
+ # StripeSwiftInterop.h will cause circular dependency issues.
45
+ core.private_header_files = [ 'ios/StripeSdk.h', 'ios/StripeSwiftInterop.h' ]
47
46
  core.dependency 'React-Core'
48
47
  core.dependency 'Stripe', stripe_version
49
48
  core.dependency 'StripePaymentSheet', stripe_version
@@ -54,6 +53,7 @@ Pod::Spec.new do |s|
54
53
  end
55
54
 
56
55
  s.subspec 'Onramp' do |onramp|
56
+ onramp.source_files = [ 'ios/StripeOnrampSdk.h', 'ios/StripeOnrampSdk.mm' ]
57
57
  onramp.dependency 'stripe-react-native/Core'
58
58
  onramp.dependency 'StripeCryptoOnramp', stripe_version
59
59
  end
@@ -1,19 +0,0 @@
1
- apply plugin: 'com.diffplug.spotless'
2
-
3
- allprojects {
4
- repositories {
5
- google()
6
- mavenCentral()
7
- }
8
- }
9
-
10
-
11
- spotless {
12
- kotlin {
13
- target 'src/**/*.kt'
14
- ktlint("1.5.0").setEditorConfigPath("$projectDir/../.editorconfig")
15
- trimTrailingWhitespace()
16
- indentWithSpaces()
17
- endWithNewline()
18
- }
19
- }