@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.
- package/android/build.gradle +3 -3
- package/android/gradle.properties +1 -1
- package/android/proguard-rules.txt +4 -0
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorAppearance.kt +229 -0
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementView.kt +8 -1
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementViewManager.kt +11 -0
- package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementView.kt +0 -22
- package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementViewManager.kt +0 -22
- package/android/src/main/java/com/reactnativestripesdk/PaymentSheetManager.kt +11 -4
- package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +12 -14
- package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonManager.kt +8 -0
- package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonView.kt +6 -0
- package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/PushProvisioningProxy.kt +6 -5
- package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/TapAndPayProxy.kt +91 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/AddToWalletButtonManagerDelegate.java +3 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/AddToWalletButtonManagerInterface.java +1 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerDelegate.java +0 -3
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerInterface.java +0 -1
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerDelegate.java +4 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerInterface.java +2 -0
- package/android/src/oldarch/java/com/reactnativestripesdk/NativeStripeSdkModuleSpec.java +0 -4
- package/android/src/onramp/java/com/reactnativestripesdk/OnrampSdkModule.kt +7 -7
- package/android/src/test/java/com/reactnativestripesdk/CurrencySelectorAppearanceTest.kt +137 -0
- package/ios/CurrencySelectorAppearance.swift +120 -0
- package/ios/CurrencySelectorElementManager.m +1 -0
- package/ios/CurrencySelectorElementView.swift +16 -1
- package/ios/NewArch/EmbeddedPaymentElementViewComponentView.mm +0 -4
- package/ios/NewArch/StripeCurrencySelectorElementComponentView.mm +1 -0
- package/ios/StripeSdk.mm +0 -7
- package/ios/StripeSdkImpl+Embedded.swift +0 -24
- package/ios/StripeSdkImpl+PaymentSheet.swift +1 -2
- package/lib/commonjs/components/AddToWalletButton.js.map +1 -1
- package/lib/commonjs/components/CurrencySelectorElement.js +1 -1
- package/lib/commonjs/components/CurrencySelectorElement.js.map +1 -1
- package/lib/commonjs/connect/EmbeddedComponent.js +2 -2
- package/lib/commonjs/connect/EmbeddedComponent.js.map +1 -1
- package/lib/commonjs/specs/NativeAddToWalletButton.js +1 -1
- package/lib/commonjs/specs/NativeAddToWalletButton.js.map +1 -1
- package/lib/commonjs/specs/NativeCurrencySelectorElement.js +1 -1
- package/lib/commonjs/specs/NativeCurrencySelectorElement.js.map +1 -1
- package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js +1 -1
- package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js.map +1 -1
- package/lib/commonjs/specs/NativeStripeSdkModule.js.map +1 -1
- package/lib/commonjs/types/EmbeddedPaymentElement.js +1 -1
- package/lib/commonjs/types/EmbeddedPaymentElement.js.map +1 -1
- package/lib/commonjs/types/PushProvisioning.js.map +1 -1
- package/lib/module/components/AddToWalletButton.js.map +1 -1
- package/lib/module/components/CurrencySelectorElement.js +1 -1
- package/lib/module/components/CurrencySelectorElement.js.map +1 -1
- package/lib/module/connect/EmbeddedComponent.js +2 -2
- package/lib/module/connect/EmbeddedComponent.js.map +1 -1
- package/lib/module/specs/NativeAddToWalletButton.js +1 -1
- package/lib/module/specs/NativeAddToWalletButton.js.map +1 -1
- package/lib/module/specs/NativeCurrencySelectorElement.js +1 -1
- package/lib/module/specs/NativeCurrencySelectorElement.js.map +1 -1
- package/lib/module/specs/NativeEmbeddedPaymentElement.js +1 -1
- package/lib/module/specs/NativeEmbeddedPaymentElement.js.map +1 -1
- package/lib/module/specs/NativeStripeSdkModule.js.map +1 -1
- package/lib/module/types/EmbeddedPaymentElement.js +1 -1
- package/lib/module/types/EmbeddedPaymentElement.js.map +1 -1
- package/lib/module/types/PushProvisioning.js.map +1 -1
- package/lib/typescript/src/components/AddToWalletButton.d.ts +2 -0
- package/lib/typescript/src/components/AddToWalletButton.d.ts.map +1 -1
- package/lib/typescript/src/components/CurrencySelectorElement.d.ts +76 -1
- package/lib/typescript/src/components/CurrencySelectorElement.d.ts.map +1 -1
- package/lib/typescript/src/connect/EmbeddedComponent.d.ts +23 -0
- package/lib/typescript/src/connect/EmbeddedComponent.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeAddToWalletButton.d.ts +1 -0
- package/lib/typescript/src/specs/NativeAddToWalletButton.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts +4 -0
- package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts +0 -1
- package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +0 -1
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts.map +1 -1
- package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts +1 -10
- package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts.map +1 -1
- package/lib/typescript/src/types/PaymentMethod.d.ts +2 -0
- package/lib/typescript/src/types/PaymentMethod.d.ts.map +1 -1
- package/lib/typescript/src/types/PushProvisioning.d.ts +2 -0
- package/lib/typescript/src/types/PushProvisioning.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/AddToWalletButton.tsx +2 -0
- package/src/components/CurrencySelectorElement.tsx +101 -1
- package/src/connect/EmbeddedComponent.tsx +47 -10
- package/src/specs/NativeAddToWalletButton.ts +1 -0
- package/src/specs/NativeCurrencySelectorElement.ts +5 -0
- package/src/specs/NativeEmbeddedPaymentElement.ts +1 -10
- package/src/specs/NativeStripeSdkModule.ts +0 -3
- package/src/types/EmbeddedPaymentElement.tsx +4 -27
- package/src/types/PaymentMethod.ts +2 -0
- package/src/types/PushProvisioning.ts +2 -0
- 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.
|
|
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
|
-
}.
|
|
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.
|
|
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:
|
|
786
|
+
result: OnrampUserAttestationResult,
|
|
787
787
|
promise: Promise,
|
|
788
788
|
) {
|
|
789
789
|
when (result) {
|
|
790
|
-
is
|
|
790
|
+
is OnrampUserAttestationResult.Confirmed -> {
|
|
791
791
|
promise.resolve(
|
|
792
792
|
WritableNativeMap().apply { putString("status", "Confirmed") },
|
|
793
793
|
)
|
|
794
794
|
}
|
|
795
|
-
is
|
|
795
|
+
is OnrampUserAttestationResult.Cancelled -> {
|
|
796
796
|
promise.resolve(createCanceledError("User attestation was canceled"))
|
|
797
797
|
}
|
|
798
|
-
is
|
|
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
|
-
|
|
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
|
|
|
@@ -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
|
-
|
|
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,
|
|
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:{
|
|
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","
|
|
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.
|
|
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
|