@stripe/stripe-react-native 0.67.0 → 0.68.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 (93) hide show
  1. package/android/build.gradle +3 -3
  2. package/android/gradle.properties +1 -1
  3. package/android/proguard-rules.txt +4 -0
  4. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorAppearance.kt +229 -0
  5. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementView.kt +8 -1
  6. package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementViewManager.kt +11 -0
  7. package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementView.kt +0 -22
  8. package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementViewManager.kt +0 -22
  9. package/android/src/main/java/com/reactnativestripesdk/PaymentSheetManager.kt +11 -4
  10. package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +12 -14
  11. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonManager.kt +8 -0
  12. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonView.kt +6 -0
  13. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/PushProvisioningProxy.kt +6 -5
  14. package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/TapAndPayProxy.kt +91 -0
  15. package/android/src/oldarch/java/com/facebook/react/viewmanagers/AddToWalletButtonManagerDelegate.java +3 -0
  16. package/android/src/oldarch/java/com/facebook/react/viewmanagers/AddToWalletButtonManagerInterface.java +1 -0
  17. package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerDelegate.java +0 -3
  18. package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerInterface.java +0 -1
  19. package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerDelegate.java +4 -0
  20. package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerInterface.java +2 -0
  21. package/android/src/oldarch/java/com/reactnativestripesdk/NativeStripeSdkModuleSpec.java +0 -4
  22. package/android/src/onramp/java/com/reactnativestripesdk/OnrampSdkModule.kt +7 -7
  23. package/android/src/test/java/com/reactnativestripesdk/CurrencySelectorAppearanceTest.kt +137 -0
  24. package/ios/CurrencySelectorAppearance.swift +120 -0
  25. package/ios/CurrencySelectorElementManager.m +1 -0
  26. package/ios/CurrencySelectorElementView.swift +16 -1
  27. package/ios/NewArch/EmbeddedPaymentElementViewComponentView.mm +0 -4
  28. package/ios/NewArch/StripeCurrencySelectorElementComponentView.mm +1 -0
  29. package/ios/StripeSdk.mm +0 -7
  30. package/ios/StripeSdkImpl+Embedded.swift +0 -24
  31. package/ios/StripeSdkImpl+PaymentSheet.swift +1 -2
  32. package/lib/commonjs/components/AddToWalletButton.js.map +1 -1
  33. package/lib/commonjs/components/CurrencySelectorElement.js +1 -1
  34. package/lib/commonjs/components/CurrencySelectorElement.js.map +1 -1
  35. package/lib/commonjs/connect/EmbeddedComponent.js +2 -2
  36. package/lib/commonjs/connect/EmbeddedComponent.js.map +1 -1
  37. package/lib/commonjs/specs/NativeAddToWalletButton.js +1 -1
  38. package/lib/commonjs/specs/NativeAddToWalletButton.js.map +1 -1
  39. package/lib/commonjs/specs/NativeCurrencySelectorElement.js +1 -1
  40. package/lib/commonjs/specs/NativeCurrencySelectorElement.js.map +1 -1
  41. package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js +1 -1
  42. package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js.map +1 -1
  43. package/lib/commonjs/specs/NativeStripeSdkModule.js.map +1 -1
  44. package/lib/commonjs/types/EmbeddedPaymentElement.js +1 -1
  45. package/lib/commonjs/types/EmbeddedPaymentElement.js.map +1 -1
  46. package/lib/commonjs/types/PushProvisioning.js.map +1 -1
  47. package/lib/module/components/AddToWalletButton.js.map +1 -1
  48. package/lib/module/components/CurrencySelectorElement.js +1 -1
  49. package/lib/module/components/CurrencySelectorElement.js.map +1 -1
  50. package/lib/module/connect/EmbeddedComponent.js +2 -2
  51. package/lib/module/connect/EmbeddedComponent.js.map +1 -1
  52. package/lib/module/specs/NativeAddToWalletButton.js +1 -1
  53. package/lib/module/specs/NativeAddToWalletButton.js.map +1 -1
  54. package/lib/module/specs/NativeCurrencySelectorElement.js +1 -1
  55. package/lib/module/specs/NativeCurrencySelectorElement.js.map +1 -1
  56. package/lib/module/specs/NativeEmbeddedPaymentElement.js +1 -1
  57. package/lib/module/specs/NativeEmbeddedPaymentElement.js.map +1 -1
  58. package/lib/module/specs/NativeStripeSdkModule.js.map +1 -1
  59. package/lib/module/types/EmbeddedPaymentElement.js +1 -1
  60. package/lib/module/types/EmbeddedPaymentElement.js.map +1 -1
  61. package/lib/module/types/PushProvisioning.js.map +1 -1
  62. package/lib/typescript/src/components/AddToWalletButton.d.ts +2 -0
  63. package/lib/typescript/src/components/AddToWalletButton.d.ts.map +1 -1
  64. package/lib/typescript/src/components/CurrencySelectorElement.d.ts +76 -1
  65. package/lib/typescript/src/components/CurrencySelectorElement.d.ts.map +1 -1
  66. package/lib/typescript/src/connect/EmbeddedComponent.d.ts +23 -0
  67. package/lib/typescript/src/connect/EmbeddedComponent.d.ts.map +1 -1
  68. package/lib/typescript/src/specs/NativeAddToWalletButton.d.ts +1 -0
  69. package/lib/typescript/src/specs/NativeAddToWalletButton.d.ts.map +1 -1
  70. package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts +4 -0
  71. package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts.map +1 -1
  72. package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts +0 -1
  73. package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts.map +1 -1
  74. package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +0 -1
  75. package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts.map +1 -1
  76. package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts +1 -10
  77. package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts.map +1 -1
  78. package/lib/typescript/src/types/PaymentMethod.d.ts +2 -0
  79. package/lib/typescript/src/types/PaymentMethod.d.ts.map +1 -1
  80. package/lib/typescript/src/types/PushProvisioning.d.ts +2 -0
  81. package/lib/typescript/src/types/PushProvisioning.d.ts.map +1 -1
  82. package/package.json +1 -1
  83. package/src/components/AddToWalletButton.tsx +2 -0
  84. package/src/components/CurrencySelectorElement.tsx +101 -1
  85. package/src/connect/EmbeddedComponent.tsx +47 -10
  86. package/src/specs/NativeAddToWalletButton.ts +1 -0
  87. package/src/specs/NativeCurrencySelectorElement.ts +5 -0
  88. package/src/specs/NativeEmbeddedPaymentElement.ts +1 -10
  89. package/src/specs/NativeStripeSdkModule.ts +0 -3
  90. package/src/types/EmbeddedPaymentElement.tsx +4 -27
  91. package/src/types/PaymentMethod.ts +2 -0
  92. package/src/types/PushProvisioning.ts +2 -0
  93. package/stripe-react-native.podspec +1 -1
@@ -18,6 +18,7 @@ public interface AddToWalletButtonManagerInterface<T extends View> {
18
18
  void setIOSButtonStyle(T view, @Nullable String value);
19
19
  void setAndroidAssetSource(T view, @Nullable ReadableMap value);
20
20
  void setTestEnv(T view, boolean value);
21
+ void setIsBounceProvisioned(T view, boolean value);
21
22
  void setCardDetails(T view, Dynamic value);
22
23
  void setToken(T view, Dynamic value);
23
24
  void setEphemeralKey(T view, Dynamic value);
@@ -50,9 +50,6 @@ public class EmbeddedPaymentElementViewManagerDelegate<T extends View, U extends
50
50
  case "update":
51
51
  mViewManager.update(view, args != null ? args.getString(0) : null);
52
52
  break;
53
- case "updateWithCheckout":
54
- mViewManager.updateWithCheckout(view, args != null ? args.getString(0) : null);
55
- break;
56
53
  }
57
54
  }
58
55
  }
@@ -20,5 +20,4 @@ public interface EmbeddedPaymentElementViewManagerInterface<T extends View> {
20
20
  void confirm(T view);
21
21
  void clearPaymentOption(T view);
22
22
  void update(T view, @Nullable String intentConfigurationJson);
23
- void updateWithCheckout(T view, @Nullable String sessionKey);
24
23
  }
@@ -11,6 +11,7 @@ package com.facebook.react.viewmanagers;
11
11
 
12
12
  import android.view.View;
13
13
  import androidx.annotation.Nullable;
14
+ import com.facebook.react.bridge.DynamicFromObject;
14
15
  import com.facebook.react.uimanager.BaseViewManager;
15
16
  import com.facebook.react.uimanager.BaseViewManagerDelegate;
16
17
  import com.facebook.react.uimanager.LayoutShadowNode;
@@ -28,6 +29,9 @@ public class StripeCurrencySelectorElementManagerDelegate<T extends View, U exte
28
29
  case "disabled":
29
30
  mViewManager.setDisabled(view, value == null ? false : (boolean) value);
30
31
  break;
32
+ case "appearance":
33
+ mViewManager.setAppearance(view, new DynamicFromObject(value));
34
+ break;
31
35
  default:
32
36
  super.setProperty(view, propName, value);
33
37
  }
@@ -11,8 +11,10 @@ package com.facebook.react.viewmanagers;
11
11
 
12
12
  import android.view.View;
13
13
  import androidx.annotation.Nullable;
14
+ import com.facebook.react.bridge.Dynamic;
14
15
 
15
16
  public interface StripeCurrencySelectorElementManagerInterface<T extends View> {
16
17
  void setSessionKey(T view, @Nullable String value);
17
18
  void setDisabled(T view, boolean value);
19
+ void setAppearance(T view, Dynamic value);
18
20
  }
@@ -265,10 +265,6 @@ public abstract class NativeStripeSdkModuleSpec extends ReactContextBaseJavaModu
265
265
  @DoNotStrip
266
266
  public abstract void updateEmbeddedPaymentElement(ReadableMap intentConfig, Promise promise);
267
267
 
268
- @ReactMethod
269
- @DoNotStrip
270
- public abstract void updateEmbeddedPaymentElementWithCheckout(String sessionKey, Promise promise);
271
-
272
268
  @ReactMethod
273
269
  @DoNotStrip
274
270
  public abstract void clearEmbeddedPaymentOption(double viewTag, Promise promise);
@@ -39,7 +39,7 @@ import com.stripe.android.crypto.onramp.model.OnrampCheckoutResult
39
39
  import com.stripe.android.crypto.onramp.model.OnrampCollectPaymentMethodResult
40
40
  import com.stripe.android.crypto.onramp.model.OnrampConfigurationResult
41
41
  import com.stripe.android.crypto.onramp.model.OnrampCreateCryptoPaymentTokenResult
42
- import com.stripe.android.crypto.onramp.model.OnrampCrsCarfDeclarationResult
42
+ import com.stripe.android.crypto.onramp.model.OnrampUserAttestationResult
43
43
  import com.stripe.android.crypto.onramp.model.OnrampHasLinkAccountResult
44
44
  import com.stripe.android.crypto.onramp.model.OnrampLogOutResult
45
45
  import com.stripe.android.crypto.onramp.model.OnrampRegisterLinkUserResult
@@ -152,7 +152,7 @@ class OnrampSdkModule(
152
152
  handleOnrampCheckoutResult(result, checkoutPromise!!)
153
153
  }.verifyKycCallback { result ->
154
154
  handleOnrampKycVerificationResult(result, verifyKycPromise!!)
155
- }.crsCarfDeclarationCallback { result ->
155
+ }.userAttestationCallback { result ->
156
156
  userAttestationPromise?.let {
157
157
  handleUserAttestationResult(result, it)
158
158
  }
@@ -426,7 +426,7 @@ class OnrampSdkModule(
426
426
  }
427
427
 
428
428
  userAttestationPromise = promise
429
- presenter.presentCrsCarfDeclaration()
429
+ presenter.presentUserAttestation()
430
430
  }
431
431
 
432
432
  @ReactMethod
@@ -783,19 +783,19 @@ class OnrampSdkModule(
783
783
  }
784
784
 
785
785
  private fun handleUserAttestationResult(
786
- result: OnrampCrsCarfDeclarationResult,
786
+ result: OnrampUserAttestationResult,
787
787
  promise: Promise,
788
788
  ) {
789
789
  when (result) {
790
- is OnrampCrsCarfDeclarationResult.Confirmed -> {
790
+ is OnrampUserAttestationResult.Confirmed -> {
791
791
  promise.resolve(
792
792
  WritableNativeMap().apply { putString("status", "Confirmed") },
793
793
  )
794
794
  }
795
- is OnrampCrsCarfDeclarationResult.Cancelled -> {
795
+ is OnrampUserAttestationResult.Cancelled -> {
796
796
  promise.resolve(createCanceledError("User attestation was canceled"))
797
797
  }
798
- is OnrampCrsCarfDeclarationResult.Failed -> {
798
+ is OnrampUserAttestationResult.Failed -> {
799
799
  promise.resolve(createOnrampFailedError(result.error))
800
800
  }
801
801
  }
@@ -0,0 +1,137 @@
1
+ package com.reactnativestripesdk
2
+
3
+ import android.content.Context
4
+ import androidx.test.core.app.ApplicationProvider
5
+ import com.reactnativestripesdk.utils.readableMapOf
6
+ import com.stripe.android.checkout.Checkout
7
+ import com.stripe.android.paymentelement.CheckoutSessionPreview
8
+ import org.junit.Assert.assertEquals
9
+ import org.junit.Assert.assertNotNull
10
+ import org.junit.Test
11
+ import org.junit.runner.RunWith
12
+ import org.robolectric.RobolectricTestRunner
13
+
14
+ @OptIn(CheckoutSessionPreview::class)
15
+ @RunWith(RobolectricTestRunner::class)
16
+ class CurrencySelectorAppearanceTest {
17
+ private val context: Context = ApplicationProvider.getApplicationContext()
18
+
19
+ @Test
20
+ fun buildCurrencySelectorAppearance_WithNullMap_ReturnsDefaultAppearance() {
21
+ val appearance = buildCurrencySelectorAppearance(null, context)
22
+
23
+ assertNotNull(appearance)
24
+ }
25
+
26
+ @Test
27
+ fun buildCurrencySelectorAppearance_WithEmptyMap_ReturnsDefaultAppearance() {
28
+ val appearance = buildCurrencySelectorAppearance(readableMapOf(), context)
29
+
30
+ assertNotNull(appearance)
31
+ }
32
+
33
+ @Test
34
+ fun buildCurrencySelectorAppearance_WithColorStrings_Success() {
35
+ val appearance =
36
+ buildCurrencySelectorAppearance(
37
+ readableMapOf(
38
+ "background" to "#111111",
39
+ "selectedBackground" to "#222222",
40
+ "borderColor" to "#333333",
41
+ "textColor" to "#444444",
42
+ "selectedTextColor" to "#555555",
43
+ "textSecondaryColor" to "#666666",
44
+ "dangerColor" to "#777777",
45
+ ),
46
+ context,
47
+ )
48
+
49
+ assertNotNull(getField(appearance, "background"))
50
+ assertNotNull(getField(appearance, "selectedBackground"))
51
+ assertNotNull(getField(appearance, "borderColor"))
52
+ assertNotNull(getField(appearance, "textColor"))
53
+ assertNotNull(getField(appearance, "selectedTextColor"))
54
+ assertNotNull(getField(appearance, "textSecondaryColor"))
55
+ assertNotNull(getField(appearance, "dangerColor"))
56
+ }
57
+
58
+ @Test
59
+ fun buildCurrencySelectorAppearance_WithThemedColor_UsesLightColor() {
60
+ val appearance =
61
+ buildCurrencySelectorAppearance(
62
+ readableMapOf(
63
+ "textColor" to
64
+ readableMapOf(
65
+ "light" to "#000000",
66
+ "dark" to "#FFFFFF",
67
+ ),
68
+ ),
69
+ context,
70
+ )
71
+
72
+ assertNotNull(getField(appearance, "textColor"))
73
+ }
74
+
75
+ @Test
76
+ fun buildCurrencySelectorAppearance_WithInvalidColor_IgnoresValue() {
77
+ val appearance =
78
+ buildCurrencySelectorAppearance(
79
+ readableMapOf(
80
+ "textColor" to "#FF",
81
+ ),
82
+ context,
83
+ )
84
+
85
+ // Invalid hex is silently ignored (logged as warning), color remains null/default
86
+ val field = appearance.javaClass.getDeclaredField("textColor")
87
+ field.isAccessible = true
88
+ val textColor = field.get(appearance)
89
+ assertEquals(null, textColor)
90
+ }
91
+
92
+ @Test
93
+ fun buildCurrencySelectorAppearance_WithDimensionsAndFont_Success() {
94
+ val appearance =
95
+ buildCurrencySelectorAppearance(
96
+ readableMapOf(
97
+ "cornerRadius" to 12.0,
98
+ "borderWidth" to 2.0,
99
+ "contentVerticalPadding" to 6.0,
100
+ "font" to
101
+ readableMapOf(
102
+ "scale" to 1.2,
103
+ ),
104
+ ),
105
+ context,
106
+ )
107
+
108
+ assertEquals(12f, getField(appearance, "cornerRadiusDp"))
109
+ assertEquals(2f, getField(appearance, "borderWidthDp"))
110
+ assertEquals(6f, getField(appearance, "contentVerticalPaddingDp"))
111
+ assertEquals(1.2f, getField(appearance, "sizeScaleFactor"))
112
+ }
113
+
114
+ @Test
115
+ fun buildCurrencySelectorAppearance_WithLabelContentValues_Success() {
116
+ listOf("automatic", "currencyCode", "amount").forEach { labelContent ->
117
+ val appearance =
118
+ buildCurrencySelectorAppearance(
119
+ readableMapOf(
120
+ "labelContent" to labelContent,
121
+ ),
122
+ context,
123
+ )
124
+
125
+ assertNotNull(getField(appearance, "labelContent"))
126
+ }
127
+ }
128
+
129
+ private fun getField(
130
+ appearance: Checkout.CurrencySelectorContentAppearance,
131
+ fieldName: String,
132
+ ): Any? {
133
+ val field = appearance.javaClass.getDeclaredField(fieldName)
134
+ field.isAccessible = true
135
+ return field.get(appearance)
136
+ }
137
+ }
@@ -0,0 +1,120 @@
1
+ //
2
+ // CurrencySelectorAppearance.swift
3
+ // stripe-react-native
4
+ //
5
+ // Created by Nick Porter on 6/24/26.
6
+ //
7
+
8
+ @_spi(ReactNativeSDK) import StripePaymentSheet
9
+ import UIKit
10
+
11
+ internal class CurrencySelectorAppearance {
12
+ class func buildAppearanceFromParams(params: NSDictionary?) -> Checkout.CurrencySelectorView.Appearance {
13
+ var appearance = Checkout.CurrencySelectorView.Appearance()
14
+
15
+ guard let params = params else { return appearance }
16
+
17
+ if let background = parseThemedColor(params: params, key: CurrencySelectorAppearanceKeys.BACKGROUND) {
18
+ appearance.background = background
19
+ }
20
+ if let selectedBackground = parseThemedColor(params: params, key: CurrencySelectorAppearanceKeys.SELECTED_BACKGROUND) {
21
+ appearance.selectedBackground = selectedBackground
22
+ }
23
+ if let borderColor = parseThemedColor(params: params, key: CurrencySelectorAppearanceKeys.BORDER_COLOR) {
24
+ appearance.border = borderColor
25
+ }
26
+ if let textColor = parseThemedColor(params: params, key: CurrencySelectorAppearanceKeys.TEXT_COLOR) {
27
+ appearance.text = textColor
28
+ }
29
+ if let selectedTextColor = parseThemedColor(params: params, key: CurrencySelectorAppearanceKeys.SELECTED_TEXT_COLOR) {
30
+ appearance.selectedText = selectedTextColor
31
+ }
32
+ if let textSecondaryColor = parseThemedColor(params: params, key: CurrencySelectorAppearanceKeys.TEXT_SECONDARY_COLOR) {
33
+ appearance.textSecondary = textSecondaryColor
34
+ }
35
+ if let dangerColor = parseThemedColor(params: params, key: CurrencySelectorAppearanceKeys.DANGER_COLOR) {
36
+ appearance.danger = dangerColor
37
+ }
38
+
39
+ if let cornerRadius = params[CurrencySelectorAppearanceKeys.CORNER_RADIUS] as? CGFloat {
40
+ appearance.cornerRadius = cornerRadius
41
+ }
42
+ if let borderWidth = params[CurrencySelectorAppearanceKeys.BORDER_WIDTH] as? CGFloat {
43
+ appearance.borderWidth = borderWidth
44
+ }
45
+ if let contentVerticalPadding = params[CurrencySelectorAppearanceKeys.CONTENT_VERTICAL_PADDING] as? CGFloat {
46
+ appearance.contentVerticalPadding = contentVerticalPadding
47
+ }
48
+
49
+ if let fontParams = params[CurrencySelectorAppearanceKeys.FONT] as? NSDictionary {
50
+ if let family = fontParams[CurrencySelectorAppearanceKeys.FAMILY] as? String,
51
+ let customFont = UIFont(name: family, size: appearance.font.pointSize) {
52
+ appearance.font = customFont
53
+ }
54
+ if let scale = fontParams[CurrencySelectorAppearanceKeys.SCALE] as? CGFloat {
55
+ appearance.sizeScaleFactor = scale
56
+ }
57
+ }
58
+
59
+ if let labelContent = params[CurrencySelectorAppearanceKeys.LABEL_CONTENT] as? String {
60
+ switch labelContent {
61
+ case CurrencySelectorAppearanceKeys.CURRENCY_CODE:
62
+ appearance.labelContent = .currencyCode
63
+ case CurrencySelectorAppearanceKeys.AMOUNT:
64
+ appearance.labelContent = .amount
65
+ case CurrencySelectorAppearanceKeys.AUTOMATIC:
66
+ appearance.labelContent = .automatic
67
+ default:
68
+ break
69
+ }
70
+ }
71
+
72
+ return appearance
73
+ }
74
+
75
+ private class func parseThemedColor(params: NSDictionary, key: String) -> UIColor? {
76
+ if let colorDict = params[key] as? [String: String] {
77
+ let light = colorDict[CurrencySelectorAppearanceKeys.LIGHT]
78
+ let dark = colorDict[CurrencySelectorAppearanceKeys.DARK]
79
+ guard light != nil || dark != nil else { return nil }
80
+ return UIColor { traitCollection in
81
+ let hex = traitCollection.userInterfaceStyle == .dark
82
+ ? (dark ?? light!)
83
+ : (light ?? dark!)
84
+ return UIColor(hexString: hex)
85
+ }
86
+ }
87
+
88
+ if let colorString = params[key] as? String {
89
+ return UIColor(hexString: colorString)
90
+ }
91
+
92
+ return nil
93
+ }
94
+ }
95
+
96
+ private enum CurrencySelectorAppearanceKeys {
97
+ static let LIGHT = "light"
98
+ static let DARK = "dark"
99
+
100
+ static let BACKGROUND = "background"
101
+ static let SELECTED_BACKGROUND = "selectedBackground"
102
+ static let BORDER_COLOR = "borderColor"
103
+ static let TEXT_COLOR = "textColor"
104
+ static let SELECTED_TEXT_COLOR = "selectedTextColor"
105
+ static let TEXT_SECONDARY_COLOR = "textSecondaryColor"
106
+ static let DANGER_COLOR = "dangerColor"
107
+
108
+ static let CORNER_RADIUS = "cornerRadius"
109
+ static let BORDER_WIDTH = "borderWidth"
110
+ static let CONTENT_VERTICAL_PADDING = "contentVerticalPadding"
111
+
112
+ static let FONT = "font"
113
+ static let FAMILY = "family"
114
+ static let SCALE = "scale"
115
+
116
+ static let LABEL_CONTENT = "labelContent"
117
+ static let AUTOMATIC = "automatic"
118
+ static let CURRENCY_CODE = "currencyCode"
119
+ static let AMOUNT = "amount"
120
+ }
@@ -12,5 +12,6 @@
12
12
  @interface RCT_EXTERN_MODULE(StripeCurrencySelectorElementManager, RCTViewManager)
13
13
  RCT_EXPORT_VIEW_PROPERTY(sessionKey, NSString)
14
14
  RCT_EXPORT_VIEW_PROPERTY(disabled, BOOL)
15
+ RCT_EXPORT_VIEW_PROPERTY(appearance, NSDictionary)
15
16
  RCT_EXPORT_VIEW_PROPERTY(onHeightChange, RCTDirectEventBlock)
16
17
  @end
@@ -39,6 +39,15 @@ public class StripeCurrencySelectorElementContainerView: UIView {
39
39
  }
40
40
  }
41
41
 
42
+ @objc public var appearance: NSDictionary? {
43
+ didSet {
44
+ selectorAppearance = CurrencySelectorAppearance.buildAppearanceFromParams(params: appearance)
45
+ if let checkout = attachedCheckout {
46
+ installSelectorView(for: checkout)
47
+ }
48
+ }
49
+ }
50
+
42
51
  /// Fired whenever the inner selector's intrinsic height changes so RN
43
52
  /// can match it. Session-state changes flow through the central
44
53
  /// `checkoutSessionDidChangeState` event on `StripeSdk` (see
@@ -50,6 +59,8 @@ public class StripeCurrencySelectorElementContainerView: UIView {
50
59
  private var selectorView: Checkout.CurrencySelectorView?
51
60
  private var sessionCancellable: AnyCancellable?
52
61
  private var lastReportedHeight: CGFloat = -1
62
+ private var attachedCheckout: Checkout?
63
+ private var selectorAppearance = Checkout.CurrencySelectorView.Appearance()
53
64
 
54
65
  // MARK: - Init
55
66
 
@@ -88,6 +99,7 @@ public class StripeCurrencySelectorElementContainerView: UIView {
88
99
  return
89
100
  }
90
101
 
102
+ self.attachedCheckout = checkout
91
103
  self.installSelectorView(for: checkout)
92
104
  self.subscribeForLayoutUpdates(on: checkout)
93
105
  }
@@ -110,7 +122,9 @@ public class StripeCurrencySelectorElementContainerView: UIView {
110
122
  }
111
123
 
112
124
  private func installSelectorView(for checkout: Checkout) {
113
- let view = Checkout.CurrencySelectorView(checkout: checkout)
125
+ selectorView?.removeFromSuperview()
126
+
127
+ let view = Checkout.CurrencySelectorView(checkout: checkout, appearance: selectorAppearance)
114
128
  view.translatesAutoresizingMaskIntoConstraints = false
115
129
  view.isEnabled = !disabled
116
130
  addSubview(view)
@@ -135,6 +149,7 @@ public class StripeCurrencySelectorElementContainerView: UIView {
135
149
  sessionCancellable = nil
136
150
  selectorView?.removeFromSuperview()
137
151
  selectorView = nil
152
+ attachedCheckout = nil
138
153
  lastReportedHeight = -1
139
154
  }
140
155
 
@@ -68,10 +68,6 @@ using namespace facebook::react;
68
68
  {
69
69
  }
70
70
 
71
- - (void)updateWithCheckout:(NSString *)sessionKey
72
- {
73
- }
74
-
75
71
  #pragma mark - RCTComponentViewProtocol
76
72
 
77
73
  + (ComponentDescriptorProvider)componentDescriptorProvider
@@ -64,6 +64,7 @@ using namespace facebook::react;
64
64
 
65
65
  _view.sessionKey = RCTNSStringFromStringNilIfEmpty(newViewProps.sessionKey);
66
66
  _view.disabled = newViewProps.disabled;
67
+ _view.appearance = stripe::react::convertFollyDynamicToNSDictionaryOrNil(newViewProps.appearance);
67
68
 
68
69
  [super updateProps:props oldProps:oldProps];
69
70
  }
package/ios/StripeSdk.mm CHANGED
@@ -578,13 +578,6 @@ RCT_EXPORT_METHOD(updateEmbeddedPaymentElement:(NSDictionary *)intentConfig
578
578
  [StripeSdkImpl.shared updateEmbeddedPaymentElement:intentConfig resolve:resolve reject:reject];
579
579
  }
580
580
 
581
- RCT_EXPORT_METHOD(updateEmbeddedPaymentElementWithCheckout:(nonnull NSString *)sessionKey
582
- resolve:(nonnull RCTPromiseResolveBlock)resolve
583
- reject:(nonnull RCTPromiseRejectBlock)reject)
584
- {
585
- [StripeSdkImpl.shared updateEmbeddedPaymentElementWithCheckout:sessionKey resolve:resolve reject:reject];
586
- }
587
-
588
581
  RCT_EXPORT_METHOD(clearEmbeddedPaymentOption:(NSInteger)viewTag
589
582
  resolve:(nonnull RCTPromiseResolveBlock)resolve
590
583
  reject:(nonnull RCTPromiseRejectBlock)reject)
@@ -213,30 +213,6 @@ extension StripeSdkImpl {
213
213
  }
214
214
  }
215
215
 
216
- @objc(updateEmbeddedPaymentElementWithCheckout:resolve:reject:)
217
- public func updateEmbeddedPaymentElementWithCheckout(
218
- sessionKey: String,
219
- resolve: @escaping RCTPromiseResolveBlock,
220
- reject: @escaping RCTPromiseRejectBlock
221
- ) {
222
- guard let checkout = checkoutInstances[sessionKey] else {
223
- resolve(Errors.createError(ErrorType.Failed, "Checkout session not found"))
224
- return
225
- }
226
-
227
- Task {
228
- guard let updateResult = await self.embeddedInstance?.update(checkout: checkout) else {
229
- resolve(Errors.createError(
230
- ErrorType.Failed,
231
- "No EmbeddedPaymentElement instance — did you call create first?"
232
- ))
233
- return
234
- }
235
-
236
- self.resolveEmbeddedUpdateResult(updateResult, resolve: resolve)
237
- }
238
- }
239
-
240
216
  @objc(clearEmbeddedPaymentOption)
241
217
  public func clearEmbeddedPaymentOption() {
242
218
  DispatchQueue.main.async {
@@ -196,8 +196,7 @@ extension StripeSdkImpl {
196
196
  handlePaymentSheetFlowControllerResult(result: result, stripeSdk: self)
197
197
  }
198
198
  } else {
199
- self.paymentSheet = PaymentSheet(checkout: checkout, configuration: configuration)
200
- resolve([])
199
+ resolve(Errors.createError(ErrorType.Failed, "PaymentSheet with checkout is not supported. Use customFlow: true instead."))
201
200
  }
202
201
  } else if let paymentIntentClientSecret = params["paymentIntentClientSecret"] as? String {
203
202
  if !Errors.isPIClientSecretValid(clientSecret: paymentIntentClientSecret) {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_NativeAddToWalletButton","_jsxRuntime","_jsxFileName","_excluded","AddToWalletButton","_ref","onComplete","props","_objectWithoutProperties2","default","jsx","Object","assign","onCompleteAction","value","nativeEvent"],"sourceRoot":"../../../src","sources":["components/AddToWalletButton.tsx"],"mappings":"wSAAA,IAAAA,MAAA,CAAAC,sBAAA,CAAAC,OAAA,WAcA,IAAAC,wBAAA,CAAAF,sBAAA,CAAAC,OAAA,sCAAuE,IAAAE,WAAA,CAAAF,OAAA,0BAAAG,YAAA,wFAAAC,SAAA,gBAgEhE,QAAS,CAAAC,iBAAiBA,CAAAC,IAAA,CAAkC,IAA/B,CAAAC,UAAU,CAAAD,IAAA,CAAVC,UAAU,CAAKC,KAAK,IAAAC,yBAAA,CAAAC,OAAA,EAAAJ,IAAA,CAAAF,SAAA,EACtD,MACE,GAAAF,WAAA,CAAAS,GAAA,EAACV,wBAAA,CAAAS,OAAuB,CAAAE,MAAA,CAAAC,MAAA,IAClBL,KAAK,EACTM,gBAAgB,CAAE,QAAlB,CAAAA,gBAAgBA,CACdC,KAEE,QACC,CAAAR,UAAU,CAACQ,KAAK,CAACC,WAAW,CAAC,EAAC,EACpC,CAAC,CAEN","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_NativeAddToWalletButton","_jsxRuntime","_jsxFileName","_excluded","AddToWalletButton","_ref","onComplete","props","_objectWithoutProperties2","default","jsx","Object","assign","onCompleteAction","value","nativeEvent"],"sourceRoot":"../../../src","sources":["components/AddToWalletButton.tsx"],"mappings":"wSAAA,IAAAA,MAAA,CAAAC,sBAAA,CAAAC,OAAA,WAcA,IAAAC,wBAAA,CAAAF,sBAAA,CAAAC,OAAA,sCAAuE,IAAAE,WAAA,CAAAF,OAAA,0BAAAG,YAAA,wFAAAC,SAAA,gBAkEhE,QAAS,CAAAC,iBAAiBA,CAAAC,IAAA,CAAkC,IAA/B,CAAAC,UAAU,CAAAD,IAAA,CAAVC,UAAU,CAAKC,KAAK,IAAAC,yBAAA,CAAAC,OAAA,EAAAJ,IAAA,CAAAF,SAAA,EACtD,MACE,GAAAF,WAAA,CAAAS,GAAA,EAACV,wBAAA,CAAAS,OAAuB,CAAAE,MAAA,CAAAC,MAAA,IAClBL,KAAK,EACTM,gBAAgB,CAAE,QAAlB,CAAAA,gBAAgBA,CACdC,KAEE,QACC,CAAAR,UAAU,CAACQ,KAAK,CAACC,WAAW,CAAC,EAAC,EACpC,CAAC,CAEN","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.CurrencySelectorElement=CurrencySelectorElement;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _NativeCurrencySelectorElement=_interopRequireDefault(require("../specs/NativeCurrencySelectorElement"));var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="/Users/tjclawson/stripe/stripe-react-native/src/components/CurrencySelectorElement.tsx";var _excluded=["checkout","disabled"];function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t in e)"default"!==_t&&{}.hasOwnProperty.call(e,_t)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t))&&(i.get||i.set)?o(f,_t,i):f[_t]=e[_t]);return f;})(e,t);}function CurrencySelectorElement(_ref){var checkout=_ref.checkout,_ref$disabled=_ref.disabled,disabled=_ref$disabled===void 0?false:_ref$disabled,a11yProps=(0,_objectWithoutProperties2.default)(_ref,_excluded);var _useState=(0,_react.useState)(0),_useState2=(0,_slicedToArray2.default)(_useState,2),height=_useState2[0],setHeight=_useState2[1];var handleHeightChange=(0,_react.useCallback)(function(e){_reactNative.LayoutAnimation.configureNext(_reactNative.LayoutAnimation.Presets.easeInEaseOut);setHeight(e.nativeEvent.height);},[]);return(0,_jsxRuntime.jsx)(_NativeCurrencySelectorElement.default,Object.assign({sessionKey:checkout.sessionKey,disabled:disabled,style:{width:'100%',height:height},onHeightChange:handleHeightChange},a11yProps));}
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.CurrencySelectorElement=CurrencySelectorElement;exports.CurrencySelectorLabelContent=void 0;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _NativeCurrencySelectorElement=_interopRequireDefault(require("../specs/NativeCurrencySelectorElement"));var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="/Users/tjclawson/stripe/stripe-react-native/src/components/CurrencySelectorElement.tsx";var _excluded=["checkout","disabled","appearance"];function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t in e)"default"!==_t&&{}.hasOwnProperty.call(e,_t)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t))&&(i.get||i.set)?o(f,_t,i):f[_t]=e[_t]);return f;})(e,t);}var CurrencySelectorLabelContent=exports.CurrencySelectorLabelContent=function(CurrencySelectorLabelContent){CurrencySelectorLabelContent["Automatic"]="automatic";CurrencySelectorLabelContent["CurrencyCode"]="currencyCode";CurrencySelectorLabelContent["Amount"]="amount";return CurrencySelectorLabelContent;}({});function CurrencySelectorElement(_ref){var checkout=_ref.checkout,_ref$disabled=_ref.disabled,disabled=_ref$disabled===void 0?false:_ref$disabled,appearance=_ref.appearance,a11yProps=(0,_objectWithoutProperties2.default)(_ref,_excluded);var _useState=(0,_react.useState)(0),_useState2=(0,_slicedToArray2.default)(_useState,2),height=_useState2[0],setHeight=_useState2[1];var handleHeightChange=(0,_react.useCallback)(function(e){_reactNative.LayoutAnimation.configureNext(_reactNative.LayoutAnimation.Presets.easeInEaseOut);setHeight(e.nativeEvent.height);},[]);return(0,_jsxRuntime.jsx)(_NativeCurrencySelectorElement.default,Object.assign({sessionKey:checkout.sessionKey,disabled:disabled,appearance:appearance,style:[styles.container,{height:height}],onHeightChange:handleHeightChange},a11yProps));}var styles=_reactNative.StyleSheet.create({container:{width:'100%'}});
2
2
  //# sourceMappingURL=CurrencySelectorElement.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_NativeCurrencySelectorElement","_interopRequireDefault","_jsxRuntime","_jsxFileName","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","CurrencySelectorElement","_ref","checkout","_ref$disabled","disabled","a11yProps","_objectWithoutProperties2","_useState","useState","_useState2","_slicedToArray2","height","setHeight","handleHeightChange","useCallback","LayoutAnimation","configureNext","Presets","easeInEaseOut","nativeEvent","jsx","assign","sessionKey","style","width","onHeightChange"],"sourceRoot":"../../../src","sources":["components/CurrencySelectorElement.tsx"],"mappings":"gZAAA,IAAAA,MAAA,CAAAC,uBAAA,CAAAC,OAAA,WACA,IAAAC,YAAA,CAAAD,OAAA,iBAMA,IAAAE,8BAAA,CAAAC,sBAAA,CAAAH,OAAA,4CAEgD,IAAAI,WAAA,CAAAJ,OAAA,0BAAAK,YAAA,8FAAAC,SAAA,kCAAAP,wBAAAQ,CAAA,CAAAC,CAAA,wBAAAC,OAAA,KAAAC,CAAA,KAAAD,OAAA,GAAAE,CAAA,KAAAF,OAAA,UAAAV,uBAAA,UAAAA,wBAAAQ,CAAA,CAAAC,CAAA,MAAAA,CAAA,EAAAD,CAAA,EAAAA,CAAA,CAAAK,UAAA,QAAAL,CAAA,KAAAM,CAAA,CAAAC,CAAA,CAAAC,CAAA,EAAAC,SAAA,MAAAC,OAAA,CAAAV,CAAA,YAAAA,CAAA,mBAAAA,CAAA,qBAAAA,CAAA,QAAAQ,CAAA,IAAAF,CAAA,CAAAL,CAAA,CAAAG,CAAA,CAAAD,CAAA,KAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,SAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,EAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,CAAAQ,CAAA,WAAAM,EAAA,IAAAd,CAAA,aAAAc,EAAA,KAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,CAAAc,EAAA,KAAAP,CAAA,EAAAD,CAAA,CAAAW,MAAA,CAAAC,cAAA,GAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,CAAAc,EAAA,KAAAP,CAAA,CAAAK,GAAA,EAAAL,CAAA,CAAAM,GAAA,EAAAP,CAAA,CAAAE,CAAA,CAAAM,EAAA,CAAAP,CAAA,EAAAC,CAAA,CAAAM,EAAA,EAAAd,CAAA,CAAAc,EAAA,UAAAN,CAAA,IAAAR,CAAA,CAAAC,CAAA,GA6DzC,QAAS,CAAAmB,uBAAuBA,CAAAC,IAAA,CAIN,IAH/B,CAAAC,QAAQ,CAAAD,IAAA,CAARC,QAAQ,CAAAC,aAAA,CAAAF,IAAA,CACRG,QAAQ,CAARA,QAAQ,CAAAD,aAAA,UAAG,KAAK,CAAAA,aAAA,CACbE,SAAS,IAAAC,yBAAA,CAAAhB,OAAA,EAAAW,IAAA,CAAAtB,SAAA,EAEZ,IAAA4B,SAAA,CAA4B,GAAAC,eAAQ,EAAS,CAAC,CAAC,CAAAC,UAAA,IAAAC,eAAA,CAAApB,OAAA,EAAAiB,SAAA,IAAxCI,MAAM,CAAAF,UAAA,IAAEG,SAAS,CAAAH,UAAA,IAExB,GAAM,CAAAI,kBAAkB,CAAG,GAAAC,kBAAW,EACpC,SAAClC,CAA0C,CAAK,CAC9CmC,4BAAe,CAACC,aAAa,CAACD,4BAAe,CAACE,OAAO,CAACC,aAAa,CAAC,CACpEN,SAAS,CAAChC,CAAC,CAACuC,WAAW,CAACR,MAAM,CAAC,CACjC,CAAC,CACD,EACF,CAAC,CAED,MACE,GAAAlC,WAAA,CAAA2C,GAAA,EAAC7C,8BAAA,CAAAe,OAA6B,CAAAO,MAAA,CAAAwB,MAAA,EAC5BC,UAAU,CAAEpB,QAAQ,CAACoB,UAAW,CAChClB,QAAQ,CAAEA,QAAS,CACnBmB,KAAK,CAAE,CAAEC,KAAK,CAAE,MAAM,CAAEb,MAAM,CAANA,MAAO,CAAE,CACjCc,cAAc,CAAEZ,kBAAmB,EAC/BR,SAAS,CACd,CAAC,CAEN","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_NativeCurrencySelectorElement","_interopRequireDefault","_jsxRuntime","_jsxFileName","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","CurrencySelectorLabelContent","exports","CurrencySelectorElement","_ref","checkout","_ref$disabled","disabled","appearance","a11yProps","_objectWithoutProperties2","_useState","useState","_useState2","_slicedToArray2","height","setHeight","handleHeightChange","useCallback","LayoutAnimation","configureNext","Presets","easeInEaseOut","nativeEvent","jsx","assign","sessionKey","style","styles","container","onHeightChange","StyleSheet","create","width"],"sourceRoot":"../../../src","sources":["components/CurrencySelectorElement.tsx"],"mappings":"4bAAA,IAAAA,MAAA,CAAAC,uBAAA,CAAAC,OAAA,WACA,IAAAC,YAAA,CAAAD,OAAA,iBAQA,IAAAE,8BAAA,CAAAC,sBAAA,CAAAH,OAAA,4CAEgD,IAAAI,WAAA,CAAAJ,OAAA,0BAAAK,YAAA,8FAAAC,SAAA,+CAAAP,wBAAAQ,CAAA,CAAAC,CAAA,wBAAAC,OAAA,KAAAC,CAAA,KAAAD,OAAA,GAAAE,CAAA,KAAAF,OAAA,UAAAV,uBAAA,UAAAA,wBAAAQ,CAAA,CAAAC,CAAA,MAAAA,CAAA,EAAAD,CAAA,EAAAA,CAAA,CAAAK,UAAA,QAAAL,CAAA,KAAAM,CAAA,CAAAC,CAAA,CAAAC,CAAA,EAAAC,SAAA,MAAAC,OAAA,CAAAV,CAAA,YAAAA,CAAA,mBAAAA,CAAA,qBAAAA,CAAA,QAAAQ,CAAA,IAAAF,CAAA,CAAAL,CAAA,CAAAG,CAAA,CAAAD,CAAA,KAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,SAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,EAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,CAAAQ,CAAA,WAAAM,EAAA,IAAAd,CAAA,aAAAc,EAAA,KAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,CAAAc,EAAA,KAAAP,CAAA,EAAAD,CAAA,CAAAW,MAAA,CAAAC,cAAA,GAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,CAAAc,EAAA,KAAAP,CAAA,CAAAK,GAAA,EAAAL,CAAA,CAAAM,GAAA,EAAAP,CAAA,CAAAE,CAAA,CAAAM,EAAA,CAAAP,CAAA,EAAAC,CAAA,CAAAM,EAAA,EAAAd,CAAA,CAAAc,EAAA,UAAAN,CAAA,IAAAR,CAAA,CAAAC,CAAA,MAKpC,CAAAmB,4BAA4B,CAAAC,OAAA,CAAAD,4BAAA,UAA5BA,4BAA4B,EAA5BA,4BAA4B,0BAA5BA,4BAA4B,gCAA5BA,4BAA4B,0BAA5B,CAAAA,4BAA4B,OAkJjC,QAAS,CAAAE,uBAAuBA,CAAAC,IAAA,CAKN,IAJ/B,CAAAC,QAAQ,CAAAD,IAAA,CAARC,QAAQ,CAAAC,aAAA,CAAAF,IAAA,CACRG,QAAQ,CAARA,QAAQ,CAAAD,aAAA,UAAG,KAAK,CAAAA,aAAA,CAChBE,UAAU,CAAAJ,IAAA,CAAVI,UAAU,CACPC,SAAS,IAAAC,yBAAA,CAAAnB,OAAA,EAAAa,IAAA,CAAAxB,SAAA,EAEZ,IAAA+B,SAAA,CAA4B,GAAAC,eAAQ,EAAS,CAAC,CAAC,CAAAC,UAAA,IAAAC,eAAA,CAAAvB,OAAA,EAAAoB,SAAA,IAAxCI,MAAM,CAAAF,UAAA,IAAEG,SAAS,CAAAH,UAAA,IAExB,GAAM,CAAAI,kBAAkB,CAAG,GAAAC,kBAAW,EACpC,SAACrC,CAA0C,CAAK,CAC9CsC,4BAAe,CAACC,aAAa,CAACD,4BAAe,CAACE,OAAO,CAACC,aAAa,CAAC,CACpEN,SAAS,CAACnC,CAAC,CAAC0C,WAAW,CAACR,MAAM,CAAC,CACjC,CAAC,CACD,EACF,CAAC,CAED,MACE,GAAArC,WAAA,CAAA8C,GAAA,EAAChD,8BAAA,CAAAe,OAA6B,CAAAO,MAAA,CAAA2B,MAAA,EAC5BC,UAAU,CAAErB,QAAQ,CAACqB,UAAW,CAChCnB,QAAQ,CAAEA,QAAS,CACnBC,UAAU,CAAEA,UAAW,CACvBmB,KAAK,CAAE,CAACC,MAAM,CAACC,SAAS,CAAE,CAAEd,MAAM,CAANA,MAAO,CAAC,CAAE,CACtCe,cAAc,CAAEb,kBAAmB,EAC/BR,SAAS,CACd,CAAC,CAEN,CAEA,GAAM,CAAAmB,MAAM,CAAGG,uBAAU,CAACC,MAAM,CAAC,CAC/BH,SAAS,CAAE,CACTI,KAAK,CAAE,MACT,CACF,CAAC,CAAC","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.EmbeddedComponent=EmbeddedComponent;var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _package=_interopRequireDefault(require("../../../package.json"));var _NativeStripeSdkModule=_interopRequireDefault(require("../specs/NativeStripeSdkModule"));var _events=require("../events");var _ConnectComponentsProvider=require("./ConnectComponentsProvider");var _ComponentAnalyticsClient=require("./analytics/ComponentAnalyticsClient");var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="/Users/tjclawson/stripe/stripe-react-native/src/connect/EmbeddedComponent.tsx";function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t in e)"default"!==_t&&{}.hasOwnProperty.call(e,_t)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t))&&(i.get||i.set)?o(f,_t,i):f[_t]=e[_t]);return f;})(e,t);}var DEVELOPMENT_MODE=false;var DEVELOPMENT_URL=_reactNative.Platform.OS==='android'?'http://10.0.2.2:3001':'http://localhost:3001';var PRODUCTION_URL='https://connect-js.stripe.com';var BASE_URL=DEVELOPMENT_MODE?DEVELOPMENT_URL:PRODUCTION_URL;var sdkVersion=_package.default.version;var POLLING_INTERVAL_MS=500;var URL_DEDUPLICATION_TIMEOUT_MS=1000;var DEEP_LINK_GRACE_PERIOD_MS=500;if(!/^\d+\.\d+\.\d+$/.test(sdkVersion)){throw new Error(`Invalid SDK version: ${sdkVersion}. Must be in format X.Y.Z`);}var platformPrefix=_reactNative.Platform.select({ios:'iPhone',android:'Android',default:'Mobile'});var userAgent=[platformPrefix,`Stripe ReactNative SDK ${_reactNative.Platform.OS}/${_reactNative.Platform.Version}`,`stripe-react_native/${sdkVersion}`].join(' - ');var ALLOWED_STRIPE_HOSTS=['connect-js.stripe.com','connect.stripe.com','verify.stripe.com'].concat((0,_toConsumableArray2.default)(DEVELOPMENT_MODE?['10.0.2.2:3001','localhost:3001']:[]));function EmbeddedComponent(props){var _appearance$variables;var _useState=(0,_react.useState)(null),_useState2=(0,_slicedToArray2.default)(_useState,2),dynamicWebview=_useState2[0],setDynamicWebview=_useState2[1];var pendingAuthWebViewPromises=(0,_react.useRef)(new Map());var pendingFinancialConnectionsPromise=(0,_react.useRef)(null);var recentlyHandledUrls=(0,_react.useRef)(new Set());var loadWebViewComponent=(0,_react.useCallback)((0,_asyncToGenerator2.default)(function*(){if(dynamicWebview)return;setDynamicWebview({WebView:null});try{var mod=yield import('react-native-webview');setDynamicWebview({WebView:mod.WebView});}catch(err){console.error('Failed to import react-native-webview:',err);}}),[dynamicWebview]);(0,_react.useEffect)(function(){loadWebViewComponent();},[loadWebViewComponent]);var appState=(0,_react.useRef)(_reactNative.AppState.currentState);(0,_react.useEffect)(function(){if(_reactNative.Platform.OS!=='android')return;var pollInterval=setInterval((0,_asyncToGenerator2.default)(function*(){if(pendingAuthWebViewPromises.current.size===0){return;}try{var pendingUrls=yield _NativeStripeSdkModule.default.pollAndClearPendingStripeConnectUrls();if(pendingUrls&&pendingUrls.length>0){pendingUrls.forEach(function(url){if(url.startsWith('stripe-connect://')){if(recentlyHandledUrls.current.has(url)){return;}recentlyHandledUrls.current.add(url);setTimeout(function(){recentlyHandledUrls.current.delete(url);},URL_DEDUPLICATION_TIMEOUT_MS);var firstEntry=pendingAuthWebViewPromises.current.entries().next().value;if(firstEntry){var _firstEntry=(0,_slicedToArray2.default)(firstEntry,2),id=_firstEntry[0],promiseData=_firstEntry[1];if(promiseData.timeoutId){clearTimeout(promiseData.timeoutId);}pendingAuthWebViewPromises.current.delete(id);promiseData.callback(id,url);_NativeStripeSdkModule.default.authWebViewDeepLinkHandled(id).catch(function(){});}}});}}catch(_error){}}),POLLING_INTERVAL_MS);return function(){clearInterval(pollInterval);};},[]);(0,_react.useEffect)(function(){var subscription=_reactNative.AppState.addEventListener('change',function(nextAppState){if(appState.current.match(/inactive|background/)&&nextAppState==='active'){if(pendingAuthWebViewPromises.current.size>0){pendingAuthWebViewPromises.current.forEach(function(promiseData,id){if(!promiseData.timeoutId){var timeoutId=setTimeout(function(){var stillPending=pendingAuthWebViewPromises.current.get(id);if(stillPending){pendingAuthWebViewPromises.current.delete(id);stillPending.callback(id,null);}},DEEP_LINK_GRACE_PERIOD_MS);promiseData.timeoutId=timeoutId;}});}}appState.current=nextAppState;});return function(){var _pendingFinancialConn;var promises=pendingAuthWebViewPromises.current;promises.forEach(function(promiseData,_id){if(promiseData.timeoutId){clearTimeout(promiseData.timeoutId);}});promises.clear();(_pendingFinancialConn=pendingFinancialConnectionsPromise.current)==null||_pendingFinancialConn.cleanup();subscription.remove();};},[]);var _useConnectComponents=(0,_ConnectComponentsProvider.useConnectComponents)(),connectInstance=_useConnectComponents.connectInstance,appearance=_useConnectComponents.appearance,locale=_useConnectComponents.locale,analyticsClient=_useConnectComponents.analyticsClient;var _ref3=connectInstance.initParams,fonts=_ref3.fonts,publishableKey=_ref3.publishableKey,fetchClientSecret=_ref3.fetchClientSecret,overrides=_ref3.overrides;var component=props.component,componentProps=props.componentProps,onLoadError=props.onLoadError,onLoaderStart=props.onLoaderStart,onPageDidLoad=props.onPageDidLoad,callbacks=props.callbacks,style=props.style;var componentAnalytics=(0,_react.useMemo)(function(){return new _ComponentAnalyticsClient.ComponentAnalyticsClient(analyticsClient,{publishableKey:publishableKey,platformId:overrides==null?void 0:overrides.platformId,merchantId:overrides==null?void 0:overrides.merchantId,livemode:typeof(overrides==null?void 0:overrides.livemode)==='boolean'?overrides.livemode:publishableKey==null?void 0:publishableKey.startsWith('pk_live_'),component:component});},[analyticsClient,publishableKey,overrides,component]);var hashParams={component:component,publicKey:publishableKey,merchantIdOverride:overrides==null?void 0:overrides.merchantId,platformIdOverride:overrides==null?void 0:overrides.platformId,apiKeyOverride:overrides==null?void 0:overrides.apiKey,livemodeOverride:overrides==null?void 0:overrides.livemode};var hash=Object.entries(hashParams).filter(function(_ref4){var _ref5=(0,_slicedToArray2.default)(_ref4,2),_=_ref5[0],value=_ref5[1];return value!=null;}).map(function(_ref6){var _ref7=(0,_slicedToArray2.default)(_ref6,2),key=_ref7[0],value=_ref7[1];return`${encodeURIComponent(key)}=${encodeURIComponent(value)}`;}).join('&');var connectURL=`${BASE_URL}/v1.0/react_native_webview.html#${hash}`;var source=(0,_react.useMemo)(function(){return{uri:connectURL};},[connectURL]);var ref=(0,_react.useRef)(null);var hasTriedSourceReload=(0,_react.useRef)(false);var _useState3=(0,_react.useState)(appearance),_useState4=(0,_slicedToArray2.default)(_useState3,2),prevAppearance=_useState4[0],setPrevAppearance=_useState4[1];var _useState5=(0,_react.useState)(locale),_useState6=(0,_slicedToArray2.default)(_useState5,2),prevLocale=_useState6[0],setPrevLocale=_useState6[1];if(prevAppearance!==appearance||prevLocale!==locale){var _ref$current;setPrevAppearance(appearance);setPrevLocale(locale);var patchedAppearance=withDefaultFontFamily(appearance);(_ref$current=ref.current)==null||_ref$current.injectJavaScript(`
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.EmbeddedComponent=EmbeddedComponent;exports.toStripeJsBankAccountToken=toStripeJsBankAccountToken;var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _package=_interopRequireDefault(require("../../../package.json"));var _NativeStripeSdkModule=_interopRequireDefault(require("../specs/NativeStripeSdkModule"));var _events=require("../events");var _ConnectComponentsProvider=require("./ConnectComponentsProvider");var _FinancialConnections=require("../types/FinancialConnections");var _ComponentAnalyticsClient=require("./analytics/ComponentAnalyticsClient");var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="/Users/tjclawson/stripe/stripe-react-native/src/connect/EmbeddedComponent.tsx";function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap(),n=new WeakMap();return(_interopRequireWildcard=function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var o,i,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f);}for(var _t in e)"default"!==_t&&{}.hasOwnProperty.call(e,_t)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_t))&&(i.get||i.set)?o(f,_t,i):f[_t]=e[_t]);return f;})(e,t);}var DEVELOPMENT_MODE=false;var DEVELOPMENT_URL=_reactNative.Platform.OS==='android'?'http://10.0.2.2:3001':'http://localhost:3001';var PRODUCTION_URL='https://connect-js.stripe.com';var BASE_URL=DEVELOPMENT_MODE?DEVELOPMENT_URL:PRODUCTION_URL;var sdkVersion=_package.default.version;var POLLING_INTERVAL_MS=500;var URL_DEDUPLICATION_TIMEOUT_MS=1000;var DEEP_LINK_GRACE_PERIOD_MS=500;if(!/^\d+\.\d+\.\d+$/.test(sdkVersion)){throw new Error(`Invalid SDK version: ${sdkVersion}. Must be in format X.Y.Z`);}var platformPrefix=_reactNative.Platform.select({ios:'iPhone',android:'Android',default:'Mobile'});var userAgent=[platformPrefix,`Stripe ReactNative SDK ${_reactNative.Platform.OS}/${_reactNative.Platform.Version}`,`stripe-react_native/${sdkVersion}`].join(' - ');var ALLOWED_STRIPE_HOSTS=['connect-js.stripe.com','connect.stripe.com','verify.stripe.com'].concat((0,_toConsumableArray2.default)(DEVELOPMENT_MODE?['10.0.2.2:3001','localhost:3001']:[]));function EmbeddedComponent(props){var _appearance$variables;var _useState=(0,_react.useState)(null),_useState2=(0,_slicedToArray2.default)(_useState,2),dynamicWebview=_useState2[0],setDynamicWebview=_useState2[1];var pendingAuthWebViewPromises=(0,_react.useRef)(new Map());var pendingFinancialConnectionsPromise=(0,_react.useRef)(null);var recentlyHandledUrls=(0,_react.useRef)(new Set());var loadWebViewComponent=(0,_react.useCallback)((0,_asyncToGenerator2.default)(function*(){if(dynamicWebview)return;setDynamicWebview({WebView:null});try{var mod=yield import('react-native-webview');setDynamicWebview({WebView:mod.WebView});}catch(err){console.error('Failed to import react-native-webview:',err);}}),[dynamicWebview]);(0,_react.useEffect)(function(){loadWebViewComponent();},[loadWebViewComponent]);var appState=(0,_react.useRef)(_reactNative.AppState.currentState);(0,_react.useEffect)(function(){if(_reactNative.Platform.OS!=='android')return;var pollInterval=setInterval((0,_asyncToGenerator2.default)(function*(){if(pendingAuthWebViewPromises.current.size===0){return;}try{var pendingUrls=yield _NativeStripeSdkModule.default.pollAndClearPendingStripeConnectUrls();if(pendingUrls&&pendingUrls.length>0){pendingUrls.forEach(function(url){if(url.startsWith('stripe-connect://')){if(recentlyHandledUrls.current.has(url)){return;}recentlyHandledUrls.current.add(url);setTimeout(function(){recentlyHandledUrls.current.delete(url);},URL_DEDUPLICATION_TIMEOUT_MS);var firstEntry=pendingAuthWebViewPromises.current.entries().next().value;if(firstEntry){var _firstEntry=(0,_slicedToArray2.default)(firstEntry,2),id=_firstEntry[0],promiseData=_firstEntry[1];if(promiseData.timeoutId){clearTimeout(promiseData.timeoutId);}pendingAuthWebViewPromises.current.delete(id);promiseData.callback(id,url);_NativeStripeSdkModule.default.authWebViewDeepLinkHandled(id).catch(function(){});}}});}}catch(_error){}}),POLLING_INTERVAL_MS);return function(){clearInterval(pollInterval);};},[]);(0,_react.useEffect)(function(){var subscription=_reactNative.AppState.addEventListener('change',function(nextAppState){if(appState.current.match(/inactive|background/)&&nextAppState==='active'){if(pendingAuthWebViewPromises.current.size>0){pendingAuthWebViewPromises.current.forEach(function(promiseData,id){if(!promiseData.timeoutId){var timeoutId=setTimeout(function(){var stillPending=pendingAuthWebViewPromises.current.get(id);if(stillPending){pendingAuthWebViewPromises.current.delete(id);stillPending.callback(id,null);}},DEEP_LINK_GRACE_PERIOD_MS);promiseData.timeoutId=timeoutId;}});}}appState.current=nextAppState;});return function(){var _pendingFinancialConn;var promises=pendingAuthWebViewPromises.current;promises.forEach(function(promiseData,_id){if(promiseData.timeoutId){clearTimeout(promiseData.timeoutId);}});promises.clear();(_pendingFinancialConn=pendingFinancialConnectionsPromise.current)==null||_pendingFinancialConn.cleanup();subscription.remove();};},[]);var _useConnectComponents=(0,_ConnectComponentsProvider.useConnectComponents)(),connectInstance=_useConnectComponents.connectInstance,appearance=_useConnectComponents.appearance,locale=_useConnectComponents.locale,analyticsClient=_useConnectComponents.analyticsClient;var _ref3=connectInstance.initParams,fonts=_ref3.fonts,publishableKey=_ref3.publishableKey,fetchClientSecret=_ref3.fetchClientSecret,overrides=_ref3.overrides;var component=props.component,componentProps=props.componentProps,onLoadError=props.onLoadError,onLoaderStart=props.onLoaderStart,onPageDidLoad=props.onPageDidLoad,callbacks=props.callbacks,style=props.style;var componentAnalytics=(0,_react.useMemo)(function(){return new _ComponentAnalyticsClient.ComponentAnalyticsClient(analyticsClient,{publishableKey:publishableKey,platformId:overrides==null?void 0:overrides.platformId,merchantId:overrides==null?void 0:overrides.merchantId,livemode:typeof(overrides==null?void 0:overrides.livemode)==='boolean'?overrides.livemode:publishableKey==null?void 0:publishableKey.startsWith('pk_live_'),component:component});},[analyticsClient,publishableKey,overrides,component]);var hashParams={component:component,publicKey:publishableKey,merchantIdOverride:overrides==null?void 0:overrides.merchantId,platformIdOverride:overrides==null?void 0:overrides.platformId,apiKeyOverride:overrides==null?void 0:overrides.apiKey,livemodeOverride:overrides==null?void 0:overrides.livemode};var hash=Object.entries(hashParams).filter(function(_ref4){var _ref5=(0,_slicedToArray2.default)(_ref4,2),_=_ref5[0],value=_ref5[1];return value!=null;}).map(function(_ref6){var _ref7=(0,_slicedToArray2.default)(_ref6,2),key=_ref7[0],value=_ref7[1];return`${encodeURIComponent(key)}=${encodeURIComponent(value)}`;}).join('&');var connectURL=`${BASE_URL}/v1.0/react_native_webview.html#${hash}`;var source=(0,_react.useMemo)(function(){return{uri:connectURL};},[connectURL]);var ref=(0,_react.useRef)(null);var hasTriedSourceReload=(0,_react.useRef)(false);var _useState3=(0,_react.useState)(appearance),_useState4=(0,_slicedToArray2.default)(_useState3,2),prevAppearance=_useState4[0],setPrevAppearance=_useState4[1];var _useState5=(0,_react.useState)(locale),_useState6=(0,_slicedToArray2.default)(_useState5,2),prevLocale=_useState6[0],setPrevLocale=_useState6[1];if(prevAppearance!==appearance||prevLocale!==locale){var _ref$current;setPrevAppearance(appearance);setPrevLocale(locale);var patchedAppearance=withDefaultFontFamily(appearance);(_ref$current=ref.current)==null||_ref$current.injectJavaScript(`
2
2
  (function() {
3
3
  window.updateConnectInstance(${JSON.stringify({appearance:patchedAppearance,locale:locale})});
4
4
  true;
@@ -20,5 +20,5 @@ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault
20
20
  })();
21
21
  `);};var onMessageCallback=(0,_react.useCallback)(function(){var _ref0=(0,_asyncToGenerator2.default)(function*(event){var message;try{message=JSON.parse(event.nativeEvent.data);}catch(error){componentAnalytics.logDeserializeMessageError('unknown',error instanceof Error?error:new Error(String(error)));return;}if(message.type==='fetchClientSecret'){var _ref$current6;var clientSecret=yield fetchClientSecret().catch(function(error){handleUnexpectedError(error);return null;});if(!clientSecret)return;(_ref$current6=ref.current)==null||_ref$current6.injectJavaScript(`
22
22
  window.clientSecretDeferred.resolve(${JSON.stringify(clientSecret)});
23
- `);}else if(message.type==='debug'){console.debug(`[EmbeddedComponent ${component}]: ${message.data}`);}else if(message.type==='pageDidLoad'){var _message$data;var pageViewId=(_message$data=message.data)==null?void 0:_message$data.pageViewId;componentAnalytics.logComponentWebPageLoaded(pageViewId);onPageDidLoad==null||onPageDidLoad();}else if(message.type==='componentLoaded'){componentAnalytics.logComponentLoaded();}else if(message.type==='accountSessionClaimed'){}else if(message.type==='openFinancialConnections'){var messageData=message.data;var _clientSecret=messageData.clientSecret,id=messageData.id,connectedAccountId=messageData.connectedAccountId;if(!_clientSecret||typeof _clientSecret!=='string'){handleFinancialConnectionsResult(id,{error:{code:'InvalidClientSecret',message:'Invalid or missing clientSecret parameter'}});return;}if(pendingFinancialConnectionsPromise.current){handleFinancialConnectionsResult(id,{error:{code:'AlreadyInProgress',message:'Financial Connections flow already in progress'}});return;}var eventListener=null;if(__DEV__){eventListener=(0,_events.addListener)('onFinancialConnectionsEvent',function(fcEvent){console.debug(`[FinancialConnections ${component}]: ${fcEvent.name}`,fcEvent.metadata);});}var cleanup=function cleanup(){var _eventListener;(_eventListener=eventListener)==null||_eventListener.remove();pendingFinancialConnectionsPromise.current=null;};pendingFinancialConnectionsPromise.current={id:id,cleanup:cleanup};_NativeStripeSdkModule.default.collectFinancialConnectionsAccounts(_clientSecret,{connectedAccountId:connectedAccountId}).then(function(_ref1){var session=_ref1.session,error=_ref1.error;cleanup();if(error){handleFinancialConnectionsResult(id,{session:undefined,token:undefined,error:{code:error.code,message:error.message,localizedMessage:error.localizedMessage,type:error.type}});}else if(session){handleFinancialConnectionsResult(id,{session:session,token:undefined,error:undefined});}else{handleFinancialConnectionsResult(id,{error:{code:'UnexpectedError',message:'No session or error returned from Financial Connections'}});}}).catch(function(unexpectedError){cleanup();handleUnexpectedError(unexpectedError);handleFinancialConnectionsResult(id,{error:{code:'UnexpectedError',message:unexpectedError instanceof Error?unexpectedError.message:'An unexpected error occurred during Financial Connections'}});});}else if(message.type==='closeWebView'){callbacks==null||callbacks.onCloseWebView==null||callbacks.onCloseWebView({});}else if(message.type==='callSupplementalFunction'){}else if(message.type==='onSetterFunctionCalled'){var _ref10=message.data,setter=_ref10.setter,value=_ref10.value;if(setter==='setOnLoaderStart'){onLoaderStart==null||onLoaderStart(value);}else if(setter==='setOnLoadError'){onLoadError==null||onLoadError(value);}else{var functionName=setter.charAt(3).toLowerCase()+setter.substring(4);if(callbacks!=null&&callbacks[functionName]){callbacks[functionName](value);}else{componentAnalytics.logUnrecognizedSetter(setter);}}}else if(message.type==='openAuthenticatedWebView'){var _ref11=message.data,url=_ref11.url,_id2=_ref11.id;if(!isValidUrl(url)){handleUnexpectedError(new Error(`Invalid URL for authenticated webview: ${url}`));return;}componentAnalytics.logAuthenticatedWebViewOpened(_id2);_NativeStripeSdkModule.default.openAuthenticatedWebView(_id2,url).then(function(result){if(_reactNative.Platform.OS==='ios'){var _result$url;var resultUrl=(_result$url=result==null?void 0:result.url)!=null?_result$url:null;if(resultUrl){componentAnalytics.logAuthenticatedWebViewRedirected(_id2);}else{componentAnalytics.logAuthenticatedWebViewCanceled(_id2);}handleAuthWebViewResult(_id2,resultUrl);}else{pendingAuthWebViewPromises.current.set(_id2,{callback:function callback(authId,resultUrl){if(resultUrl){componentAnalytics.logAuthenticatedWebViewRedirected(authId);}else{componentAnalytics.logAuthenticatedWebViewCanceled(authId);}handleAuthWebViewResult(authId,resultUrl);}});}}).catch(function(error){if(__DEV__){console.error(`[EmbeddedComponent] Error opening authenticated webview:`,error);}componentAnalytics.logAuthenticatedWebViewError(_id2,error instanceof Error?error:new Error(String(error)));handleUnexpectedError(error);});}else{}});return function(_x){return _ref0.apply(this,arguments);};}(),[callbacks,component,componentAnalytics,fetchClientSecret,handleUnexpectedError,onLoadError,onLoaderStart,onPageDidLoad]);var onShouldStartLoadWithRequest=(0,_react.useCallback)(function(event){var url=event.url,navigationType=event.navigationType;if(isCsvExportUrl(url)){_NativeStripeSdkModule.default.downloadAndShareFile(url,null).then(function(result){if(!result.success){console.warn('CSV export share failed:',result.error);}}).catch(function(error){handleUnexpectedError(error);});return false;}if(navigationType!=='click')return true;if(ALLOWED_STRIPE_HOSTS.some(function(host){return url.includes(host);})){return true;}_reactNative.Linking.openURL(url).catch(function(error){handleUnexpectedError(error);});return false;},[handleUnexpectedError]);var backgroundColor=(appearance==null||(_appearance$variables=appearance.variables)==null?void 0:_appearance$variables.colorBackground)||'#FFFFFF';var mergedStyle=(0,_react.useMemo)(function(){return[{backgroundColor:backgroundColor},style];},[backgroundColor,style]);if(!WebViewComponent)return null;return(0,_jsxRuntime.jsx)(WebViewComponent,{ref:ref,style:mergedStyle,webviewDebuggingEnabled:DEVELOPMENT_MODE,source:source,userAgent:userAgent,injectedJavaScriptObject:{initParams:{appearance:withDefaultFontFamily(appearance),locale:locale,fonts:fonts},initComponentProps:componentProps,appInfo:{applicationId:overrides==null?void 0:overrides.applicationId}},injectedJavaScriptBeforeContentLoaded:'(function() {})();',onMessage:onMessageCallback,onShouldStartLoadWithRequest:onShouldStartLoadWithRequest,onLayout:handleLayout,mediaCapturePermissionGrantType:"grantIfSameHostElsePrompt",allowsInlineMediaPlayback:true,mediaPlaybackRequiresUserAction:false});}var DEFAULT_FONT="-apple-system, 'system-ui', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'";function withDefaultFontFamily(appearance){var _appearance$variables2;if(appearance!=null&&(_appearance$variables2=appearance.variables)!=null&&_appearance$variables2.fontFamily){return appearance;}return Object.assign({},appearance,{variables:Object.assign({},appearance==null?void 0:appearance.variables,{fontFamily:DEFAULT_FONT})});}function isValidUrl(url){try{var parsedUrl=new URL(url);return parsedUrl.protocol==='http:'||parsedUrl.protocol==='https:';}catch(_unused){return false;}}function isCsvExportUrl(url){try{var parsedUrl=new URL(url);return parsedUrl.hostname.includes('stripe-data-exports')||parsedUrl.pathname.includes('stripe-data-exports');}catch(_unused2){return false;}}
23
+ `);}else if(message.type==='debug'){console.debug(`[EmbeddedComponent ${component}]: ${message.data}`);}else if(message.type==='pageDidLoad'){var _message$data;var pageViewId=(_message$data=message.data)==null?void 0:_message$data.pageViewId;componentAnalytics.logComponentWebPageLoaded(pageViewId);onPageDidLoad==null||onPageDidLoad();}else if(message.type==='componentLoaded'){componentAnalytics.logComponentLoaded();}else if(message.type==='accountSessionClaimed'){}else if(message.type==='openFinancialConnections'){var messageData=message.data;var _clientSecret=messageData.clientSecret,id=messageData.id,connectedAccountId=messageData.connectedAccountId;if(!_clientSecret||typeof _clientSecret!=='string'){handleFinancialConnectionsResult(id,{error:{code:'InvalidClientSecret',message:'Invalid or missing clientSecret parameter'}});return;}if(pendingFinancialConnectionsPromise.current){handleFinancialConnectionsResult(id,{error:{code:'AlreadyInProgress',message:'Financial Connections flow already in progress'}});return;}var eventListener=null;if(__DEV__){eventListener=(0,_events.addListener)('onFinancialConnectionsEvent',function(fcEvent){console.debug(`[FinancialConnections ${component}]: ${fcEvent.name}`,fcEvent.metadata);});}var cleanup=function cleanup(){var _eventListener;(_eventListener=eventListener)==null||_eventListener.remove();pendingFinancialConnectionsPromise.current=null;};pendingFinancialConnectionsPromise.current={id:id,cleanup:cleanup};_NativeStripeSdkModule.default.collectBankAccountToken(_clientSecret,{connectedAccountId:connectedAccountId}).then(function(_ref1){var session=_ref1.session,token=_ref1.token,error=_ref1.error;cleanup();if(error){if(error.code===_FinancialConnections.FinancialConnectionsSheetError.Canceled){handleFinancialConnectionsResult(id,{session:undefined,token:undefined,error:undefined});return;}handleFinancialConnectionsResult(id,{session:undefined,token:undefined,error:{code:error.code,message:error.message,localizedMessage:error.localizedMessage,type:error.type}});}else if(token||session){handleFinancialConnectionsResult(id,{session:session,token:token?toStripeJsBankAccountToken(token):null,error:undefined});}else{handleFinancialConnectionsResult(id,{error:{code:'UnexpectedError',message:'No session, token, or error returned from Financial Connections'}});}}).catch(function(unexpectedError){cleanup();handleUnexpectedError(unexpectedError);handleFinancialConnectionsResult(id,{error:{code:'UnexpectedError',message:unexpectedError instanceof Error?unexpectedError.message:'An unexpected error occurred during Financial Connections'}});});}else if(message.type==='closeWebView'){callbacks==null||callbacks.onCloseWebView==null||callbacks.onCloseWebView({});}else if(message.type==='callSupplementalFunction'){}else if(message.type==='onSetterFunctionCalled'){var _ref10=message.data,setter=_ref10.setter,value=_ref10.value;if(setter==='setOnLoaderStart'){onLoaderStart==null||onLoaderStart(value);}else if(setter==='setOnLoadError'){onLoadError==null||onLoadError(value);}else{var functionName=setter.charAt(3).toLowerCase()+setter.substring(4);if(callbacks!=null&&callbacks[functionName]){callbacks[functionName](value);}else{componentAnalytics.logUnrecognizedSetter(setter);}}}else if(message.type==='openAuthenticatedWebView'){var _ref11=message.data,url=_ref11.url,_id2=_ref11.id;if(!isValidUrl(url)){handleUnexpectedError(new Error(`Invalid URL for authenticated webview: ${url}`));return;}componentAnalytics.logAuthenticatedWebViewOpened(_id2);_NativeStripeSdkModule.default.openAuthenticatedWebView(_id2,url).then(function(result){if(_reactNative.Platform.OS==='ios'){var _result$url;var resultUrl=(_result$url=result==null?void 0:result.url)!=null?_result$url:null;if(resultUrl){componentAnalytics.logAuthenticatedWebViewRedirected(_id2);}else{componentAnalytics.logAuthenticatedWebViewCanceled(_id2);}handleAuthWebViewResult(_id2,resultUrl);}else{pendingAuthWebViewPromises.current.set(_id2,{callback:function callback(authId,resultUrl){if(resultUrl){componentAnalytics.logAuthenticatedWebViewRedirected(authId);}else{componentAnalytics.logAuthenticatedWebViewCanceled(authId);}handleAuthWebViewResult(authId,resultUrl);}});}}).catch(function(error){if(__DEV__){console.error(`[EmbeddedComponent] Error opening authenticated webview:`,error);}componentAnalytics.logAuthenticatedWebViewError(_id2,error instanceof Error?error:new Error(String(error)));handleUnexpectedError(error);});}else{}});return function(_x){return _ref0.apply(this,arguments);};}(),[callbacks,component,componentAnalytics,fetchClientSecret,handleUnexpectedError,onLoadError,onLoaderStart,onPageDidLoad]);var onShouldStartLoadWithRequest=(0,_react.useCallback)(function(event){var url=event.url,navigationType=event.navigationType;if(isCsvExportUrl(url)){_NativeStripeSdkModule.default.downloadAndShareFile(url,null).then(function(result){if(!result.success){console.warn('CSV export share failed:',result.error);}}).catch(function(error){handleUnexpectedError(error);});return false;}if(navigationType!=='click')return true;if(ALLOWED_STRIPE_HOSTS.some(function(host){return url.includes(host);})){return true;}_reactNative.Linking.openURL(url).catch(function(error){handleUnexpectedError(error);});return false;},[handleUnexpectedError]);var backgroundColor=(appearance==null||(_appearance$variables=appearance.variables)==null?void 0:_appearance$variables.colorBackground)||'#FFFFFF';var mergedStyle=(0,_react.useMemo)(function(){return[{backgroundColor:backgroundColor},style];},[backgroundColor,style]);if(!WebViewComponent)return null;return(0,_jsxRuntime.jsx)(WebViewComponent,{ref:ref,style:mergedStyle,webviewDebuggingEnabled:DEVELOPMENT_MODE,source:source,userAgent:userAgent,injectedJavaScriptObject:{initParams:{appearance:withDefaultFontFamily(appearance),locale:locale,fonts:fonts},initComponentProps:componentProps,appInfo:{applicationId:overrides==null?void 0:overrides.applicationId}},injectedJavaScriptBeforeContentLoaded:'(function() {})();',onMessage:onMessageCallback,onShouldStartLoadWithRequest:onShouldStartLoadWithRequest,onLayout:handleLayout,mediaCapturePermissionGrantType:"grantIfSameHostElsePrompt",allowsInlineMediaPlayback:true,mediaPlaybackRequiresUserAction:false});}var DEFAULT_FONT="-apple-system, 'system-ui', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'";function withDefaultFontFamily(appearance){var _appearance$variables2;if(appearance!=null&&(_appearance$variables2=appearance.variables)!=null&&_appearance$variables2.fontFamily){return appearance;}return Object.assign({},appearance,{variables:Object.assign({},appearance==null?void 0:appearance.variables,{fontFamily:DEFAULT_FONT})});}function toStripeJsBankAccountToken(token){var ba=token.bankAccount;return{id:token.id,object:'token',type:'bank_account',used:token.used,livemode:token.livemode,created:token.created,bank_account:ba?{id:ba.id,object:'bank_account',account_holder_name:ba.accountHolderName,account_holder_type:ba.accountHolderType,bank_name:ba.bankName,country:ba.country,currency:ba.currency,fingerprint:ba.fingerprint,last4:ba.last4,routing_number:ba.routingNumber,status:ba.status}:null};}function isValidUrl(url){try{var parsedUrl=new URL(url);return parsedUrl.protocol==='http:'||parsedUrl.protocol==='https:';}catch(_unused){return false;}}function isCsvExportUrl(url){try{var parsedUrl=new URL(url);return parsedUrl.hostname.includes('stripe-data-exports')||parsedUrl.pathname.includes('stripe-data-exports');}catch(_unused2){return false;}}
24
24
  //# sourceMappingURL=EmbeddedComponent.js.map