@stripe/stripe-react-native 0.65.0 → 0.66.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 (239) hide show
  1. package/README.md +2 -2
  2. package/android/detekt/detekt-baseline.xml +1 -76
  3. package/android/gradle.properties +4 -4
  4. package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormView.kt +3 -1
  5. package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormViewManager.kt +2 -1
  6. package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +56 -58
  7. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementEvent.kt +26 -0
  8. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementView.kt +139 -0
  9. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementViewManager.kt +59 -0
  10. package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementView.kt +105 -49
  11. package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementViewManager.kt +72 -12
  12. package/android/src/main/java/com/reactnativestripesdk/EventEmitterCompat.kt +4 -0
  13. package/android/src/main/java/com/reactnativestripesdk/FinancialConnectionsSheetManager.kt +8 -4
  14. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonManager.kt +2 -1
  15. package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +26 -11
  16. package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherManager.kt +2 -1
  17. package/android/src/main/java/com/reactnativestripesdk/NavigationBarView.kt +14 -5
  18. package/android/src/main/java/com/reactnativestripesdk/PaymentElementConfig.kt +6 -2
  19. package/android/src/main/java/com/reactnativestripesdk/PaymentLauncherManager.kt +2 -1
  20. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt +2 -1
  21. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodMessagingElementConfig.kt +6 -2
  22. package/android/src/main/java/com/reactnativestripesdk/PaymentMethodMessagingElementViewManager.kt +2 -1
  23. package/android/src/main/java/com/reactnativestripesdk/PaymentOptionDisplayDataMapper.kt +8 -4
  24. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetAppearance.kt +9 -3
  25. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetManager.kt +118 -48
  26. package/android/src/main/java/com/reactnativestripesdk/StripeAbstractComposeView.kt +1 -0
  27. package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +281 -46
  28. package/android/src/main/java/com/reactnativestripesdk/StripeSdkPackage.kt +2 -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 +8 -18
  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 +127 -0
  37. package/android/src/main/java/com/reactnativestripesdk/utils/DefaultActivityLifecycleCallbacks.kt +41 -0
  38. package/android/src/main/java/com/reactnativestripesdk/utils/Errors.kt +4 -2
  39. package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +5 -1
  40. package/android/src/main/java/com/reactnativestripesdk/utils/Mappers.kt +29 -13
  41. package/android/src/main/java/com/reactnativestripesdk/utils/PostalCodeUtilities.kt +2 -1
  42. package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerDelegate.java +6 -0
  43. package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerInterface.java +2 -0
  44. package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerDelegate.java +35 -0
  45. package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerInterface.java +18 -0
  46. package/android/src/oldarch/java/com/reactnativestripesdk/NativeOnrampSdkModuleSpec.java +17 -3
  47. package/android/src/oldarch/java/com/reactnativestripesdk/NativeStripeSdkModuleSpec.java +13 -1
  48. package/android/src/onramp/java/com/reactnativestripesdk/OnrampMappers.kt +116 -0
  49. package/android/src/onramp/java/com/reactnativestripesdk/OnrampSdkModule.kt +109 -1
  50. package/android/src/test/java/com/reactnativestripesdk/DrawableLoadingTest.kt +6 -2
  51. package/android/src/test/java/com/reactnativestripesdk/mappers/MappersTest.kt +60 -0
  52. package/android/src/test/java/com/reactnativestripesdk/mappers/OnrampMappersTest.kt +145 -0
  53. package/android/src/test/java/com/reactnativestripesdk/mappers/PaymentOptionDisplayDataMapperTest.kt +9 -4
  54. package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutMappersTest.kt +98 -0
  55. package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutTestFixtures.java +57 -0
  56. package/ios/ConnectAccountOnboarding/ConnectAccountOnboardingViewController.swift +6 -8
  57. package/ios/CurrencySelectorElementManager.m +16 -0
  58. package/ios/CurrencySelectorElementView.swift +159 -0
  59. package/ios/EmbeddedPaymentElementView.swift +1 -1
  60. package/ios/Mappers+Checkout.swift +337 -0
  61. package/ios/Mappers.swift +90 -2
  62. package/ios/NewArch/EmbeddedPaymentElementViewComponentView.mm +16 -2
  63. package/ios/NewArch/StripeCurrencySelectorElementComponentView.h +10 -0
  64. package/ios/NewArch/StripeCurrencySelectorElementComponentView.mm +89 -0
  65. package/ios/OldArch/StripeSdkEventEmitterCompat.h +1 -0
  66. package/ios/OldArch/StripeSdkEventEmitterCompat.m +6 -0
  67. package/ios/PaymentOptionDisplayData+ReactNative.swift +1 -1
  68. package/ios/PaymentSheetAppearance.swift +1 -1
  69. package/ios/StripeOnrampSdk.mm +19 -0
  70. package/ios/StripeSdk.mm +136 -0
  71. package/ios/StripeSdkEmitter.swift +1 -0
  72. package/ios/StripeSdkImpl+Checkout.swift +360 -0
  73. package/ios/StripeSdkImpl+CustomerSheet.swift +1 -1
  74. package/ios/StripeSdkImpl+Embedded.swift +108 -27
  75. package/ios/StripeSdkImpl+PaymentSheet.swift +18 -2
  76. package/ios/StripeSdkImpl.swift +89 -7
  77. package/jest/mock.js +13 -1
  78. package/lib/commonjs/components/AddToWalletButton.js +1 -1
  79. package/lib/commonjs/components/AddToWalletButton.js.map +1 -1
  80. package/lib/commonjs/components/AddressSheet.js +1 -1
  81. package/lib/commonjs/components/AddressSheet.js.map +1 -1
  82. package/lib/commonjs/components/AuBECSDebitForm.js +1 -1
  83. package/lib/commonjs/components/AuBECSDebitForm.js.map +1 -1
  84. package/lib/commonjs/components/CardField.js +1 -1
  85. package/lib/commonjs/components/CardField.js.map +1 -1
  86. package/lib/commonjs/components/CardForm.js +1 -1
  87. package/lib/commonjs/components/CardForm.js.map +1 -1
  88. package/lib/commonjs/components/CurrencySelectorElement.js +2 -0
  89. package/lib/commonjs/components/CurrencySelectorElement.js.map +1 -0
  90. package/lib/commonjs/components/PaymentMethodMessagingElement.js +1 -1
  91. package/lib/commonjs/components/PaymentMethodMessagingElement.js.map +1 -1
  92. package/lib/commonjs/components/PlatformPayButton.js +1 -1
  93. package/lib/commonjs/components/PlatformPayButton.js.map +1 -1
  94. package/lib/commonjs/components/StripeContainer.js +1 -1
  95. package/lib/commonjs/components/StripeContainer.js.map +1 -1
  96. package/lib/commonjs/connect/Components.js +1 -1
  97. package/lib/commonjs/connect/Components.js.map +1 -1
  98. package/lib/commonjs/connect/ConnectComponentsProvider.js +1 -1
  99. package/lib/commonjs/connect/ConnectComponentsProvider.js.map +1 -1
  100. package/lib/commonjs/connect/EmbeddedComponent.js +1 -1
  101. package/lib/commonjs/connect/EmbeddedComponent.js.map +1 -1
  102. package/lib/commonjs/connect/ModalCloseButton.js +1 -1
  103. package/lib/commonjs/connect/ModalCloseButton.js.map +1 -1
  104. package/lib/commonjs/connect/NavigationBar.js +1 -1
  105. package/lib/commonjs/connect/NavigationBar.js.map +1 -1
  106. package/lib/commonjs/events.js.map +1 -1
  107. package/lib/commonjs/functions.js +1 -1
  108. package/lib/commonjs/functions.js.map +1 -1
  109. package/lib/commonjs/helpers.js +1 -1
  110. package/lib/commonjs/hooks/useCheckout.js +1 -1
  111. package/lib/commonjs/hooks/useCheckout.js.map +1 -1
  112. package/lib/commonjs/hooks/useOnramp.js +1 -1
  113. package/lib/commonjs/hooks/useOnramp.js.map +1 -1
  114. package/lib/commonjs/specs/NativeAddToWalletButton.js +1 -1
  115. package/lib/commonjs/specs/NativeAddressSheet.js +1 -1
  116. package/lib/commonjs/specs/NativeApplePayButton.js +1 -1
  117. package/lib/commonjs/specs/NativeAuBECSDebitForm.js +1 -1
  118. package/lib/commonjs/specs/NativeCardField.js +1 -1
  119. package/lib/commonjs/specs/NativeCardField.js.map +1 -1
  120. package/lib/commonjs/specs/NativeCardForm.js +1 -1
  121. package/lib/commonjs/specs/NativeCardForm.js.map +1 -1
  122. package/lib/commonjs/specs/NativeConnectAccountOnboardingView.js +1 -1
  123. package/lib/commonjs/specs/NativeCurrencySelectorElement.js +2 -0
  124. package/lib/commonjs/specs/NativeCurrencySelectorElement.js.map +1 -0
  125. package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js +1 -1
  126. package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js.map +1 -1
  127. package/lib/commonjs/specs/NativeGooglePayButton.js +1 -1
  128. package/lib/commonjs/specs/NativeNavigationBar.js +1 -1
  129. package/lib/commonjs/specs/NativeOnrampSdkModule.js.map +1 -1
  130. package/lib/commonjs/specs/NativePaymentMethodMessagingElement.js +1 -1
  131. package/lib/commonjs/specs/NativeStripeContainer.js +1 -1
  132. package/lib/commonjs/specs/NativeStripeSdkModule.js.map +1 -1
  133. package/lib/commonjs/types/EmbeddedPaymentElement.js +1 -1
  134. package/lib/commonjs/types/EmbeddedPaymentElement.js.map +1 -1
  135. package/lib/module/components/AddToWalletButton.js +1 -1
  136. package/lib/module/components/AddToWalletButton.js.map +1 -1
  137. package/lib/module/components/AddressSheet.js +1 -1
  138. package/lib/module/components/AddressSheet.js.map +1 -1
  139. package/lib/module/components/AuBECSDebitForm.js +1 -1
  140. package/lib/module/components/AuBECSDebitForm.js.map +1 -1
  141. package/lib/module/components/CardField.js +1 -1
  142. package/lib/module/components/CardField.js.map +1 -1
  143. package/lib/module/components/CardForm.js +1 -1
  144. package/lib/module/components/CardForm.js.map +1 -1
  145. package/lib/module/components/CurrencySelectorElement.js +2 -0
  146. package/lib/module/components/CurrencySelectorElement.js.map +1 -0
  147. package/lib/module/components/PaymentMethodMessagingElement.js +1 -1
  148. package/lib/module/components/PaymentMethodMessagingElement.js.map +1 -1
  149. package/lib/module/components/PlatformPayButton.js +1 -1
  150. package/lib/module/components/PlatformPayButton.js.map +1 -1
  151. package/lib/module/components/StripeContainer.js +1 -1
  152. package/lib/module/components/StripeContainer.js.map +1 -1
  153. package/lib/module/connect/Components.js +1 -1
  154. package/lib/module/connect/Components.js.map +1 -1
  155. package/lib/module/connect/ConnectComponentsProvider.js +1 -1
  156. package/lib/module/connect/ConnectComponentsProvider.js.map +1 -1
  157. package/lib/module/connect/EmbeddedComponent.js +1 -1
  158. package/lib/module/connect/EmbeddedComponent.js.map +1 -1
  159. package/lib/module/connect/ModalCloseButton.js +1 -1
  160. package/lib/module/connect/ModalCloseButton.js.map +1 -1
  161. package/lib/module/connect/NavigationBar.js +1 -1
  162. package/lib/module/connect/NavigationBar.js.map +1 -1
  163. package/lib/module/events.js.map +1 -1
  164. package/lib/module/functions.js +1 -1
  165. package/lib/module/functions.js.map +1 -1
  166. package/lib/module/helpers.js +1 -1
  167. package/lib/module/hooks/useCheckout.js +1 -1
  168. package/lib/module/hooks/useCheckout.js.map +1 -1
  169. package/lib/module/hooks/useOnramp.js +1 -1
  170. package/lib/module/hooks/useOnramp.js.map +1 -1
  171. package/lib/module/specs/NativeAddToWalletButton.js +1 -1
  172. package/lib/module/specs/NativeAddressSheet.js +1 -1
  173. package/lib/module/specs/NativeApplePayButton.js +1 -1
  174. package/lib/module/specs/NativeAuBECSDebitForm.js +1 -1
  175. package/lib/module/specs/NativeCardField.js +1 -1
  176. package/lib/module/specs/NativeCardField.js.map +1 -1
  177. package/lib/module/specs/NativeCardForm.js +1 -1
  178. package/lib/module/specs/NativeCardForm.js.map +1 -1
  179. package/lib/module/specs/NativeConnectAccountOnboardingView.js +1 -1
  180. package/lib/module/specs/NativeCurrencySelectorElement.js +2 -0
  181. package/lib/module/specs/NativeCurrencySelectorElement.js.map +1 -0
  182. package/lib/module/specs/NativeEmbeddedPaymentElement.js +1 -1
  183. package/lib/module/specs/NativeEmbeddedPaymentElement.js.map +1 -1
  184. package/lib/module/specs/NativeGooglePayButton.js +1 -1
  185. package/lib/module/specs/NativeNavigationBar.js +1 -1
  186. package/lib/module/specs/NativeOnrampSdkModule.js.map +1 -1
  187. package/lib/module/specs/NativePaymentMethodMessagingElement.js +1 -1
  188. package/lib/module/specs/NativeStripeContainer.js +1 -1
  189. package/lib/module/specs/NativeStripeSdkModule.js.map +1 -1
  190. package/lib/module/types/EmbeddedPaymentElement.js +1 -1
  191. package/lib/module/types/EmbeddedPaymentElement.js.map +1 -1
  192. package/lib/typescript/src/components/CurrencySelectorElement.d.ts +62 -0
  193. package/lib/typescript/src/components/CurrencySelectorElement.d.ts.map +1 -0
  194. package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts +1 -1
  195. package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts.map +1 -1
  196. package/lib/typescript/src/events.d.ts +11 -0
  197. package/lib/typescript/src/events.d.ts.map +1 -1
  198. package/lib/typescript/src/functions.d.ts.map +1 -1
  199. package/lib/typescript/src/hooks/useCheckout.d.ts.map +1 -1
  200. package/lib/typescript/src/hooks/useOnramp.d.ts +22 -0
  201. package/lib/typescript/src/hooks/useOnramp.d.ts.map +1 -1
  202. package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts +25 -0
  203. package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts.map +1 -0
  204. package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts +5 -1
  205. package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts.map +1 -1
  206. package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts +3 -0
  207. package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts.map +1 -1
  208. package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +5 -2
  209. package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts.map +1 -1
  210. package/lib/typescript/src/types/Checkout.d.ts +268 -86
  211. package/lib/typescript/src/types/Checkout.d.ts.map +1 -1
  212. package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts +36 -1
  213. package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts.map +1 -1
  214. package/lib/typescript/src/types/Onramp.d.ts +94 -0
  215. package/lib/typescript/src/types/Onramp.d.ts.map +1 -1
  216. package/package.json +16 -4
  217. package/src/components/CurrencySelectorElement.tsx +95 -0
  218. package/src/components/PaymentMethodMessagingElement.tsx +54 -52
  219. package/src/events.ts +11 -0
  220. package/src/functions.ts +30 -1
  221. package/src/hooks/useCheckout.tsx +129 -74
  222. package/src/hooks/useOnramp.tsx +44 -0
  223. package/src/specs/NativeCurrencySelectorElement.ts +35 -0
  224. package/src/specs/NativeEmbeddedPaymentElement.ts +12 -2
  225. package/src/specs/NativeOnrampSdkModule.ts +5 -0
  226. package/src/specs/NativeStripeSdkModule.ts +16 -2
  227. package/src/types/Checkout.ts +291 -86
  228. package/src/types/EmbeddedPaymentElement.tsx +117 -26
  229. package/src/types/Onramp.ts +109 -0
  230. package/stripe-react-native.podspec +1 -1
  231. package/android/.idea/AndroidProjectSystem.xml +0 -6
  232. package/android/.idea/caches/deviceStreaming.xml +0 -835
  233. package/android/.idea/compiler.xml +0 -6
  234. package/android/.idea/gradle.xml +0 -17
  235. package/android/.idea/migrations.xml +0 -10
  236. package/android/.idea/misc.xml +0 -10
  237. package/android/.idea/runConfigurations.xml +0 -17
  238. package/android/.idea/vcs.xml +0 -6
  239. package/android/local.properties +0 -8
package/ios/Mappers.swift CHANGED
@@ -3,7 +3,7 @@ import Stripe
3
3
  @_spi(ConfirmationTokensPublicPreview) import StripePayments
4
4
  #if canImport(StripeCryptoOnramp)
5
5
  @_spi(CryptoOnrampAlpha) import StripeCryptoOnramp
6
- @_spi(STP) import StripePaymentSheet
6
+ @_spi(CryptoOnrampAlpha) import StripePaymentSheet
7
7
  #else
8
8
  import StripePaymentSheet
9
9
  #endif
@@ -1262,13 +1262,20 @@ class Mappers {
1262
1262
  class func mapToKycInfo(_ params: [String: Any]) throws -> KycInfo {
1263
1263
  let address = try mapOptionalKycAddress(params["address"])
1264
1264
  let dateOfBirth = try mapOptionalDateOfBirth(params["dateOfBirth"])
1265
+ let nationalities = try mapOptionalNormalizedStringArray(
1266
+ params["nationalities"],
1267
+ field: "nationalities"
1268
+ )
1265
1269
 
1266
1270
  return KycInfo(
1267
1271
  firstName: normalizedString(params["firstName"]),
1268
1272
  lastName: normalizedString(params["lastName"]),
1269
1273
  idNumber: normalizedString(params["idNumber"]),
1270
1274
  address: address,
1271
- dateOfBirth: dateOfBirth
1275
+ dateOfBirth: dateOfBirth,
1276
+ birthCountry: normalizedString(params["birthCountry"]),
1277
+ birthCity: normalizedString(params["birthCity"]),
1278
+ nationalities: nationalities
1272
1279
  )
1273
1280
  }
1274
1281
 
@@ -1295,6 +1302,18 @@ class Mappers {
1295
1302
  result["dateOfBirth"] = mapFromDateOfBirth(dateOfBirth)
1296
1303
  }
1297
1304
 
1305
+ if let birthCountry = kycInfo.birthCountry {
1306
+ result["birthCountry"] = birthCountry
1307
+ }
1308
+
1309
+ if let birthCity = kycInfo.birthCity {
1310
+ result["birthCity"] = birthCity
1311
+ }
1312
+
1313
+ if let nationalities = kycInfo.nationalities {
1314
+ result["nationalities"] = nationalities
1315
+ }
1316
+
1298
1317
  return result
1299
1318
  }
1300
1319
 
@@ -1336,6 +1355,48 @@ class Mappers {
1336
1355
  ]
1337
1356
  }
1338
1357
 
1358
+ class func mapToComplianceIdentifier(_ params: [String: Any]) throws -> ComplianceIdentifier {
1359
+ guard let type = normalizedString(params["type"]) else {
1360
+ throw ComplianceIdentifierError.invalidField("type")
1361
+ }
1362
+
1363
+ guard let value = normalizedString(params["value"]) else {
1364
+ throw ComplianceIdentifierError.invalidField("value")
1365
+ }
1366
+
1367
+ return ComplianceIdentifier(type: ComplianceIdentifierType(rawValue: type), value: value)
1368
+ }
1369
+
1370
+ class func mapFromComplianceIdentifierRequirements(_ requirements: ComplianceIdentifierRequirements) -> [String: Any] {
1371
+ [
1372
+ "identifiers": requirements.identifiers.map(mapFromComplianceIdentifierRequirement),
1373
+ "alternatives": requirements.alternatives.map(mapFromComplianceIdentifierAlternativeGroup),
1374
+ ]
1375
+ }
1376
+
1377
+ class func mapFromSubmitIdentifiersResult(_ result: SubmitIdentifiersResult) -> [String: Any] {
1378
+ [
1379
+ "valid": result.valid,
1380
+ "identifiers": result.identifiers.map(mapFromComplianceIdentifierRequirement),
1381
+ "alternatives": result.alternatives.map(mapFromComplianceIdentifierAlternativeGroup),
1382
+ "invalidIdentifiers": result.invalidIdentifiers.map(\.rawValue),
1383
+ ]
1384
+ }
1385
+
1386
+ private class func mapFromComplianceIdentifierRequirement(_ requirement: ComplianceIdentifierRequirement) -> [String: String] {
1387
+ [
1388
+ "type": requirement.type.rawValue,
1389
+ "regulation": requirement.regulation.rawValue,
1390
+ ]
1391
+ }
1392
+
1393
+ private class func mapFromComplianceIdentifierAlternativeGroup(_ group: ComplianceIdentifierAlternativeGroup) -> [String: [String]] {
1394
+ [
1395
+ "originalMissingIdentifiers": group.originalMissingIdentifiers.map(\.rawValue),
1396
+ "alternativeMissingIdentifiers": group.alternativeMissingIdentifiers.map(\.rawValue),
1397
+ ]
1398
+ }
1399
+
1339
1400
  private class func mapOptionalKycAddress(_ value: Any?) throws -> Address? {
1340
1401
  guard let value else {
1341
1402
  return nil
@@ -1380,6 +1441,29 @@ class Mappers {
1380
1441
  return nil
1381
1442
  }
1382
1443
 
1444
+ private class func mapOptionalNormalizedStringArray(
1445
+ _ value: Any?,
1446
+ field: String
1447
+ ) throws -> [String]? {
1448
+ guard let value else {
1449
+ return nil
1450
+ }
1451
+
1452
+ guard let values = value as? [Any] else {
1453
+ throw KycInfoError.invalidField(field)
1454
+ }
1455
+
1456
+ let normalizedValues = try values.map { value in
1457
+ guard let normalizedValue = normalizedString(value) else {
1458
+ throw KycInfoError.invalidField(field)
1459
+ }
1460
+
1461
+ return normalizedValue
1462
+ }
1463
+
1464
+ return normalizedValues.isEmpty ? nil : normalizedValues
1465
+ }
1466
+
1383
1467
  private class func normalizedString(_ value: Any?) -> String? {
1384
1468
  guard let stringValue = value as? String else {
1385
1469
  return nil
@@ -1415,5 +1499,9 @@ class Mappers {
1415
1499
  enum KycInfoError: Swift.Error {
1416
1500
  case invalidField(String)
1417
1501
  }
1502
+
1503
+ enum ComplianceIdentifierError: Swift.Error {
1504
+ case invalidField(String)
1505
+ }
1418
1506
  #endif
1419
1507
  }
@@ -48,14 +48,28 @@ using namespace facebook::react;
48
48
  RCTEmbeddedPaymentElementViewHandleCommand(self, commandName, args);
49
49
  }
50
50
 
51
+ #pragma mark - Shared Codegen Commands
52
+
53
+ // These commands are declared on the shared `NativeEmbeddedPaymentElement`
54
+ // component spec because Android targets its mounted Compose view directly.
55
+ // iOS does not handle EPE actions through this view: the view only hosts
56
+ // `StripeSdkImpl.shared.embeddedInstance.view`, while create/update/confirm/
57
+ // clear are routed through `StripeSdkImpl` module methods. The no-op methods
58
+ // keep the generated Fabric command protocol satisfied on iOS.
51
59
  - (void)clearPaymentOption
52
60
  {
53
- // Android only.
54
61
  }
55
62
 
56
63
  - (void)confirm
57
64
  {
58
- // Android only.
65
+ }
66
+
67
+ - (void)update:(NSString *)intentConfigurationJson
68
+ {
69
+ }
70
+
71
+ - (void)updateWithCheckout:(NSString *)sessionKey
72
+ {
59
73
  }
60
74
 
61
75
  #pragma mark - RCTComponentViewProtocol
@@ -0,0 +1,10 @@
1
+ #import <UIKit/UIKit.h>
2
+ #import <React/RCTViewComponentView.h>
3
+
4
+ NS_ASSUME_NONNULL_BEGIN
5
+
6
+ @interface StripeCurrencySelectorElementComponentView : RCTViewComponentView
7
+
8
+ @end
9
+
10
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,89 @@
1
+ #import "StripeCurrencySelectorElementComponentView.h"
2
+
3
+ #import <react/renderer/components/rnstripe/ComponentDescriptors.h>
4
+ #import <react/renderer/components/rnstripe/EventEmitters.h>
5
+ #import <react/renderer/components/rnstripe/Props.h>
6
+ #import <react/renderer/components/rnstripe/RCTComponentViewHelpers.h>
7
+
8
+ #import <React/RCTConversions.h>
9
+ #import <React/RCTFabricComponentsPlugins.h>
10
+
11
+ #import "StripeNewArchConversions.h"
12
+ #import "StripeSwiftInterop.h"
13
+
14
+ using namespace facebook::react;
15
+
16
+ @interface StripeCurrencySelectorElementComponentView () <RCTStripeCurrencySelectorElementViewProtocol>
17
+ @end
18
+
19
+ @implementation StripeCurrencySelectorElementComponentView {
20
+ StripeCurrencySelectorElementContainerView *_view;
21
+ }
22
+
23
+ // Needed because of this: https://github.com/facebook/react-native/pull/37274
24
+ + (void)load
25
+ {
26
+ [super load];
27
+ }
28
+
29
+ - (instancetype)initWithFrame:(CGRect)frame
30
+ {
31
+ if (self = [super initWithFrame:frame]) {
32
+ static const auto defaultProps = std::make_shared<const StripeCurrencySelectorElementProps>();
33
+ _props = defaultProps;
34
+ [self prepareView];
35
+ }
36
+
37
+ return self;
38
+ }
39
+
40
+ - (void)prepareView
41
+ {
42
+ _view = [[StripeCurrencySelectorElementContainerView alloc] initWithFrame:self.frame];
43
+ self.contentView = _view;
44
+
45
+ __weak __typeof(self) weakSelf = self;
46
+
47
+ _view.onHeightChange = ^(NSDictionary *event) {
48
+ __typeof(self) strongSelf = weakSelf;
49
+ if (!strongSelf || !strongSelf->_eventEmitter) {
50
+ return;
51
+ }
52
+ StripeCurrencySelectorElementEventEmitter::OnHeightChange emitterEvent = {
53
+ .height = [(NSNumber *)event[@"height"] doubleValue],
54
+ };
55
+ std::static_pointer_cast<const StripeCurrencySelectorElementEventEmitter>(strongSelf->_eventEmitter)
56
+ ->onHeightChange(std::move(emitterEvent));
57
+ };
58
+ }
59
+
60
+ - (void)updateProps:(const facebook::react::Props::Shared &)props
61
+ oldProps:(const facebook::react::Props::Shared &)oldProps
62
+ {
63
+ const auto &newViewProps = *std::static_pointer_cast<const StripeCurrencySelectorElementProps>(props);
64
+
65
+ _view.sessionKey = RCTNSStringFromStringNilIfEmpty(newViewProps.sessionKey);
66
+ _view.disabled = newViewProps.disabled;
67
+
68
+ [super updateProps:props oldProps:oldProps];
69
+ }
70
+
71
+ #pragma mark - RCTComponentViewProtocol
72
+
73
+ + (ComponentDescriptorProvider)componentDescriptorProvider
74
+ {
75
+ return concreteComponentDescriptorProvider<StripeCurrencySelectorElementComponentDescriptor>();
76
+ }
77
+
78
+ - (void)prepareForRecycle
79
+ {
80
+ [super prepareForRecycle];
81
+ [self prepareView];
82
+ }
83
+
84
+ @end
85
+
86
+ Class<RCTComponentViewProtocol> StripeCurrencySelectorElementCls(void)
87
+ {
88
+ return StripeCurrencySelectorElementComponentView.class;
89
+ }
@@ -26,5 +26,6 @@
26
26
  - (void)emitOnCheckoutClientSecretRequested:(NSDictionary *)value;
27
27
  - (void)emitPaymentMethodMessagingElementDidUpdateHeight:(NSDictionary *)value;
28
28
  - (void)emitPaymentMethodMessagingElementConfigureResult:(NSDictionary *)value;
29
+ - (void)emitCheckoutSessionDidChangeState:(NSDictionary *)value;
29
30
  @end
30
31
 
@@ -27,6 +27,7 @@
27
27
  @"onCheckoutClientSecretRequested",
28
28
  @"paymentMethodMessagingElementDidUpdateHeight",
29
29
  @"paymentMethodMessagingElementConfigureResult",
30
+ @"checkoutSessionDidChangeState",
30
31
  ];
31
32
  }
32
33
 
@@ -140,4 +141,9 @@
140
141
  [self sendEventWithName:@"paymentMethodMessagingElementConfigureResult" body:value];
141
142
  }
142
143
 
144
+ - (void)emitCheckoutSessionDidChangeState:(NSDictionary *)value
145
+ {
146
+ [self sendEventWithName:@"checkoutSessionDidChangeState" body:value];
147
+ }
148
+
143
149
  @end
@@ -6,7 +6,7 @@
6
6
  //
7
7
 
8
8
  import Foundation
9
- @_spi(EmbeddedPaymentElementPrivateBeta) import StripePaymentSheet
9
+ import StripePaymentSheet
10
10
 
11
11
  extension EmbeddedPaymentElement.PaymentOptionDisplayData {
12
12
  /// Convert `PaymentOptionDisplayData` into a dictionary compatible with React Native bridge.
@@ -4,7 +4,7 @@
4
4
  //
5
5
  // Created by Charles Cruzan on 5/11/22.
6
6
  //
7
- @_spi(EmbeddedPaymentElementPrivateBeta) import StripePaymentSheet
7
+ import StripePaymentSheet
8
8
 
9
9
  internal class PaymentSheetAppearance {
10
10
  class func buildAppearanceFromParams(userParams: NSDictionary?) throws -> PaymentSheet.Appearance {
@@ -65,6 +65,25 @@ RCT_EXPORT_METHOD(attachKycInfo:(nonnull NSDictionary *)info
65
65
  [StripeSdkImpl.shared attachKycInfo:info resolver:resolve rejecter:reject];
66
66
  }
67
67
 
68
+ RCT_EXPORT_METHOD(retrieveMissingIdentifiers:(nonnull RCTPromiseResolveBlock)resolve
69
+ reject:(nonnull RCTPromiseRejectBlock)reject)
70
+ {
71
+ [StripeSdkImpl.shared retrieveMissingIdentifiers:resolve rejecter:reject];
72
+ }
73
+
74
+ RCT_EXPORT_METHOD(submitIdentifiers:(nonnull NSArray *)identifiers
75
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
76
+ reject:(nonnull RCTPromiseRejectBlock)reject)
77
+ {
78
+ [StripeSdkImpl.shared submitIdentifiers:identifiers resolver:resolve rejecter:reject];
79
+ }
80
+
81
+ RCT_EXPORT_METHOD(presentCRSCARFDeclaration:(nonnull RCTPromiseResolveBlock)resolve
82
+ reject:(nonnull RCTPromiseRejectBlock)reject)
83
+ {
84
+ [StripeSdkImpl.shared presentCRSCARFDeclaration:resolve rejecter:reject];
85
+ }
86
+
68
87
  RCT_EXPORT_METHOD(presentKycInfoVerification:(NSDictionary *)updatedAddress
69
88
  resolve:(nonnull RCTPromiseResolveBlock)resolve
70
89
  reject:(nonnull RCTPromiseRejectBlock)reject)
package/ios/StripeSdk.mm CHANGED
@@ -263,6 +263,124 @@ RCT_EXPORT_METHOD(handleURLCallback:(nonnull NSString *)url
263
263
  [StripeSdkImpl.shared handleURLCallback:url resolver:resolve rejecter:reject];
264
264
  }
265
265
 
266
+ RCT_EXPORT_METHOD(initCheckoutSession:(nonnull NSString *)clientSecret
267
+ configuration:(nonnull NSDictionary *)configuration
268
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
269
+ reject:(nonnull RCTPromiseRejectBlock)reject)
270
+ {
271
+ [StripeSdkImpl.shared initCheckoutSession:clientSecret
272
+ configuration:configuration
273
+ resolver:resolve
274
+ rejecter:reject];
275
+ }
276
+
277
+ RCT_EXPORT_METHOD(checkoutUpdateShippingAddress:(nonnull NSString *)sessionKey
278
+ address:(nonnull NSDictionary *)address
279
+ name:(NSString *_Nullable)name
280
+ phone:(NSString *_Nullable)phone
281
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
282
+ reject:(nonnull RCTPromiseRejectBlock)reject)
283
+ {
284
+ [StripeSdkImpl.shared checkoutUpdateShippingAddress:sessionKey
285
+ address:address
286
+ name:name
287
+ phone:phone
288
+ resolver:resolve
289
+ rejecter:reject];
290
+ }
291
+
292
+ RCT_EXPORT_METHOD(checkoutUpdateBillingAddress:(nonnull NSString *)sessionKey
293
+ address:(nonnull NSDictionary *)address
294
+ name:(NSString *_Nullable)name
295
+ phone:(NSString *_Nullable)phone
296
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
297
+ reject:(nonnull RCTPromiseRejectBlock)reject)
298
+ {
299
+ [StripeSdkImpl.shared checkoutUpdateBillingAddress:sessionKey
300
+ address:address
301
+ name:name
302
+ phone:phone
303
+ resolver:resolve
304
+ rejecter:reject];
305
+ }
306
+
307
+ RCT_EXPORT_METHOD(checkoutApplyPromotionCode:(nonnull NSString *)sessionKey
308
+ code:(nonnull NSString *)code
309
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
310
+ reject:(nonnull RCTPromiseRejectBlock)reject)
311
+ {
312
+ [StripeSdkImpl.shared checkoutApplyPromotionCode:sessionKey
313
+ code:code
314
+ resolver:resolve
315
+ rejecter:reject];
316
+ }
317
+
318
+ RCT_EXPORT_METHOD(checkoutRemovePromotionCode:(nonnull NSString *)sessionKey
319
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
320
+ reject:(nonnull RCTPromiseRejectBlock)reject)
321
+ {
322
+ [StripeSdkImpl.shared checkoutRemovePromotionCode:sessionKey
323
+ resolver:resolve
324
+ rejecter:reject];
325
+ }
326
+
327
+ RCT_EXPORT_METHOD(checkoutUpdateLineItemQuantity:(nonnull NSString *)sessionKey
328
+ lineItemId:(nonnull NSString *)lineItemId
329
+ quantity:(double)quantity
330
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
331
+ reject:(nonnull RCTPromiseRejectBlock)reject)
332
+ {
333
+ [StripeSdkImpl.shared checkoutUpdateLineItemQuantity:sessionKey
334
+ lineItemId:lineItemId
335
+ quantity:quantity
336
+ resolver:resolve
337
+ rejecter:reject];
338
+ }
339
+
340
+ RCT_EXPORT_METHOD(checkoutSelectShippingOption:(nonnull NSString *)sessionKey
341
+ id:(nonnull NSString *)identifier
342
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
343
+ reject:(nonnull RCTPromiseRejectBlock)reject)
344
+ {
345
+ [StripeSdkImpl.shared checkoutSelectShippingOption:sessionKey
346
+ id:identifier
347
+ resolver:resolve
348
+ rejecter:reject];
349
+ }
350
+
351
+ RCT_EXPORT_METHOD(checkoutUpdateTaxId:(nonnull NSString *)sessionKey
352
+ type:(nonnull NSString *)type
353
+ value:(nonnull NSString *)value
354
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
355
+ reject:(nonnull RCTPromiseRejectBlock)reject)
356
+ {
357
+ [StripeSdkImpl.shared checkoutUpdateTaxId:sessionKey
358
+ type:type
359
+ value:value
360
+ resolver:resolve
361
+ rejecter:reject];
362
+ }
363
+
364
+ RCT_EXPORT_METHOD(checkoutRunServerUpdateStart:(nonnull NSString *)sessionKey
365
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
366
+ reject:(nonnull RCTPromiseRejectBlock)reject)
367
+ {
368
+ [StripeSdkImpl.shared checkoutRunServerUpdateStart:sessionKey
369
+ resolver:resolve
370
+ rejecter:reject];
371
+ }
372
+
373
+ RCT_EXPORT_METHOD(checkoutRunServerUpdateComplete:(nonnull NSString *)sessionKey
374
+ error:(NSString *)error
375
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
376
+ reject:(nonnull RCTPromiseRejectBlock)reject)
377
+ {
378
+ [StripeSdkImpl.shared checkoutRunServerUpdateComplete:sessionKey
379
+ error:error
380
+ resolver:resolve
381
+ rejecter:reject];
382
+ }
383
+
266
384
  RCT_EXPORT_METHOD(initCustomerSheet:(nonnull NSDictionary *)params
267
385
  customerAdapterOverrides:(nonnull NSDictionary *)customerAdapterOverrides
268
386
  resolve:(nonnull RCTPromiseResolveBlock)resolve
@@ -448,6 +566,17 @@ RCT_EXPORT_METHOD(createEmbeddedPaymentElement:(nonnull NSDictionary *)intentCon
448
566
  reject:reject];
449
567
  }
450
568
 
569
+ RCT_EXPORT_METHOD(createEmbeddedPaymentElementWithCheckout:(nonnull NSString *)sessionKey
570
+ configuration:(nonnull NSDictionary *)configuration
571
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
572
+ reject:(nonnull RCTPromiseRejectBlock)reject)
573
+ {
574
+ [StripeSdkImpl.shared createEmbeddedPaymentElementWithCheckout:sessionKey
575
+ configuration:configuration
576
+ resolve:resolve
577
+ reject:reject];
578
+ }
579
+
451
580
  RCT_EXPORT_METHOD(confirmEmbeddedPaymentElement:(NSInteger)viewTag
452
581
  resolve:(nonnull RCTPromiseResolveBlock)resolve
453
582
  reject:(nonnull RCTPromiseRejectBlock)reject)
@@ -462,6 +591,13 @@ RCT_EXPORT_METHOD(updateEmbeddedPaymentElement:(NSDictionary *)intentConfig
462
591
  [StripeSdkImpl.shared updateEmbeddedPaymentElement:intentConfig resolve:resolve reject:reject];
463
592
  }
464
593
 
594
+ RCT_EXPORT_METHOD(updateEmbeddedPaymentElementWithCheckout:(nonnull NSString *)sessionKey
595
+ resolve:(nonnull RCTPromiseResolveBlock)resolve
596
+ reject:(nonnull RCTPromiseRejectBlock)reject)
597
+ {
598
+ [StripeSdkImpl.shared updateEmbeddedPaymentElementWithCheckout:sessionKey resolve:resolve reject:reject];
599
+ }
600
+
465
601
  RCT_EXPORT_METHOD(clearEmbeddedPaymentOption:(NSInteger)viewTag
466
602
  resolve:(nonnull RCTPromiseResolveBlock)resolve
467
603
  reject:(nonnull RCTPromiseRejectBlock)reject)
@@ -22,6 +22,7 @@ import Foundation
22
22
  func emitOnCustomPaymentMethodConfirmHandlerCallback(_ value: [String: Any])
23
23
  func emitPaymentMethodMessagingElementDidUpdateHeight(_ value: [String: Any])
24
24
  func emitPaymentMethodMessagingElementConfigureResult(_ value: [String: Any])
25
+ func emitCheckoutSessionDidChangeState(_ value: [String: Any])
25
26
  }
26
27
 
27
28
  @objc public protocol StripeOnrampSdkEmitter {