@stripe/stripe-react-native 0.63.0 → 0.64.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/android/build.gradle +2 -2
- package/android/detekt/detekt-baseline.xml +81 -0
- package/android/detekt/detekt.gradle +45 -0
- package/android/detekt/detekt.yml +722 -0
- package/android/gradle.properties +4 -4
- package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormView.kt +3 -1
- package/android/src/main/java/com/reactnativestripesdk/AuBECSDebitFormViewManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +5 -1
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementView.kt +26 -0
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementViewManager.kt +42 -0
- package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementView.kt +105 -49
- package/android/src/main/java/com/reactnativestripesdk/EmbeddedPaymentElementViewManager.kt +72 -12
- package/android/src/main/java/com/reactnativestripesdk/FinancialConnectionsSheetManager.kt +8 -4
- package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/GooglePayButtonView.kt +26 -11
- package/android/src/main/java/com/reactnativestripesdk/GooglePayLauncherManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/NavigationBarView.kt +14 -5
- package/android/src/main/java/com/reactnativestripesdk/PaymentElementConfig.kt +6 -2
- package/android/src/main/java/com/reactnativestripesdk/PaymentLauncherManager.kt +2 -2
- package/android/src/main/java/com/reactnativestripesdk/PaymentMethodCreateParamsFactory.kt +24 -1
- package/android/src/main/java/com/reactnativestripesdk/PaymentMethodMessagingElementConfig.kt +7 -4
- package/android/src/main/java/com/reactnativestripesdk/PaymentMethodMessagingElementViewManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/PaymentOptionDisplayDataMapper.kt +8 -4
- package/android/src/main/java/com/reactnativestripesdk/PaymentSheetAppearance.kt +9 -3
- package/android/src/main/java/com/reactnativestripesdk/PaymentSheetManager.kt +110 -29
- package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +256 -12
- package/android/src/main/java/com/reactnativestripesdk/StripeSdkPackage.kt +6 -5
- package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressLauncherManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/addresssheet/AddressSheetView.kt +3 -1
- package/android/src/main/java/com/reactnativestripesdk/customersheet/CustomerSheetManager.kt +6 -2
- package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerAdapter.kt +3 -1
- package/android/src/main/java/com/reactnativestripesdk/customersheet/ReactNativeCustomerSessionProvider.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/pushprovisioning/AddToWalletButtonManager.kt +2 -1
- package/android/src/main/java/com/reactnativestripesdk/utils/CheckoutAddressUpdate.kt +45 -0
- package/android/src/main/java/com/reactnativestripesdk/utils/CheckoutMappers.kt +101 -0
- package/android/src/main/java/com/reactnativestripesdk/utils/Errors.kt +4 -2
- package/android/src/main/java/com/reactnativestripesdk/utils/Extensions.kt +5 -1
- package/android/src/main/java/com/reactnativestripesdk/utils/Mappers.kt +31 -17
- package/android/src/main/java/com/reactnativestripesdk/utils/PostalCodeUtilities.kt +2 -1
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerDelegate.java +6 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/EmbeddedPaymentElementViewManagerInterface.java +2 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerDelegate.java +35 -0
- package/android/src/oldarch/java/com/facebook/react/viewmanagers/StripeCurrencySelectorElementManagerInterface.java +18 -0
- package/android/src/oldarch/java/com/reactnativestripesdk/NativeStripeSdkModuleSpec.java +44 -0
- package/android/src/onramp/java/com/reactnativestripesdk/OnrampMappers.kt +43 -0
- package/android/src/onramp/java/com/reactnativestripesdk/OnrampSdkModule.kt +5 -1
- package/android/src/test/java/com/reactnativestripesdk/PaymentMethodMessagingElementConfigTest.kt +3 -3
- package/android/src/test/java/com/reactnativestripesdk/mappers/MappersTest.kt +93 -0
- package/android/src/test/java/com/reactnativestripesdk/mappers/OnrampMappersTest.kt +336 -0
- package/android/src/test/java/com/reactnativestripesdk/mappers/PaymentOptionDisplayDataMapperTest.kt +9 -4
- package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutMappersTest.kt +89 -0
- package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutTestFixtures.java +49 -0
- package/ios/AddressSheet/AddressSheetUtils.swift +23 -0
- package/ios/AddressSheet/AddressSheetView.swift +9 -14
- package/ios/ConnectAccountOnboarding/ConnectAccountOnboardingViewController.swift +6 -8
- package/ios/CurrencySelectorElementManager.m +9 -0
- package/ios/CurrencySelectorElementManager.swift +12 -0
- package/ios/CurrencySelectorElementView.swift +24 -0
- package/ios/Mappers+Checkout.swift +193 -0
- package/ios/Mappers.swift +74 -5
- package/ios/NewArch/EmbeddedPaymentElementViewComponentView.mm +16 -2
- package/ios/NewArch/StripeCurrencySelectorElementComponentView.h +10 -0
- package/ios/NewArch/StripeCurrencySelectorElementComponentView.mm +75 -0
- package/ios/PaymentMethodFactory.swift +19 -0
- package/ios/PaymentMethodMessagingElementConfig.swift +6 -3
- package/ios/PaymentMethodMessagingElementView.swift +19 -0
- package/ios/StripeSdk-Bridging-Header.h +1 -0
- package/ios/StripeSdk.mm +124 -1
- package/ios/StripeSdkImpl+Checkout.swift +308 -0
- package/ios/StripeSdkImpl+Embedded.swift +108 -27
- package/ios/StripeSdkImpl+PaymentSheet.swift +18 -2
- package/ios/StripeSdkImpl.swift +41 -103
- package/ios/StripeSwiftInterop.h +1 -0
- package/jest/mock.js +16 -1
- package/lib/commonjs/components/AddToWalletButton.js +1 -1
- package/lib/commonjs/components/AddToWalletButton.js.map +1 -1
- package/lib/commonjs/components/AddressSheet.js +1 -1
- package/lib/commonjs/components/AddressSheet.js.map +1 -1
- package/lib/commonjs/components/AuBECSDebitForm.js +1 -1
- package/lib/commonjs/components/AuBECSDebitForm.js.map +1 -1
- package/lib/commonjs/components/CardField.js +1 -1
- package/lib/commonjs/components/CardField.js.map +1 -1
- package/lib/commonjs/components/CardForm.js +1 -1
- package/lib/commonjs/components/CardForm.js.map +1 -1
- package/lib/commonjs/components/CurrencySelectorElement.js +2 -0
- package/lib/commonjs/components/CurrencySelectorElement.js.map +1 -0
- package/lib/commonjs/components/PaymentMethodMessagingElement.js +2 -0
- package/lib/commonjs/components/PaymentMethodMessagingElement.js.map +1 -0
- package/lib/commonjs/components/PlatformPayButton.js +1 -1
- package/lib/commonjs/components/PlatformPayButton.js.map +1 -1
- package/lib/commonjs/components/StripeContainer.js +1 -1
- package/lib/commonjs/components/StripeContainer.js.map +1 -1
- package/lib/commonjs/components/StripeProvider.js +1 -1
- package/lib/commonjs/components/StripeProvider.js.map +1 -1
- package/lib/commonjs/connect/Components.js +1 -1
- package/lib/commonjs/connect/Components.js.map +1 -1
- package/lib/commonjs/connect/ConnectComponentsProvider.js +1 -1
- package/lib/commonjs/connect/ConnectComponentsProvider.js.map +1 -1
- package/lib/commonjs/connect/EmbeddedComponent.js +1 -1
- package/lib/commonjs/connect/EmbeddedComponent.js.map +1 -1
- package/lib/commonjs/connect/ModalCloseButton.js +1 -1
- package/lib/commonjs/connect/ModalCloseButton.js.map +1 -1
- package/lib/commonjs/connect/NavigationBar.js +1 -1
- package/lib/commonjs/connect/NavigationBar.js.map +1 -1
- package/lib/commonjs/connect/testUtils.js +1 -1
- package/lib/commonjs/connect/testUtils.js.map +1 -1
- package/lib/commonjs/events.js +1 -1
- package/lib/commonjs/events.js.map +1 -1
- package/lib/commonjs/functions.js +1 -1
- package/lib/commonjs/functions.js.map +1 -1
- package/lib/commonjs/helpers.js +1 -1
- package/lib/commonjs/hooks/useCheckout.js +2 -0
- package/lib/commonjs/hooks/useCheckout.js.map +1 -0
- package/lib/commonjs/hooks/useOnramp.js +1 -1
- package/lib/commonjs/hooks/useOnramp.js.map +1 -1
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/specs/NativeAddToWalletButton.js +1 -1
- package/lib/commonjs/specs/NativeAddressSheet.js +1 -1
- package/lib/commonjs/specs/NativeApplePayButton.js +1 -1
- package/lib/commonjs/specs/NativeAuBECSDebitForm.js +1 -1
- package/lib/commonjs/specs/NativeCardField.js +1 -1
- package/lib/commonjs/specs/NativeCardField.js.map +1 -1
- package/lib/commonjs/specs/NativeCardForm.js +1 -1
- package/lib/commonjs/specs/NativeCardForm.js.map +1 -1
- package/lib/commonjs/specs/NativeConnectAccountOnboardingView.js +1 -1
- package/lib/commonjs/specs/NativeCurrencySelectorElement.js +2 -0
- package/lib/commonjs/specs/NativeCurrencySelectorElement.js.map +1 -0
- package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js +1 -1
- package/lib/commonjs/specs/NativeEmbeddedPaymentElement.js.map +1 -1
- package/lib/commonjs/specs/NativeGooglePayButton.js +1 -1
- package/lib/commonjs/specs/NativeNavigationBar.js +1 -1
- package/lib/commonjs/specs/NativeOnrampSdkModule.js +1 -1
- package/lib/commonjs/specs/NativeOnrampSdkModule.js.map +1 -1
- package/lib/commonjs/specs/NativePaymentMethodMessagingElement.js +1 -1
- package/lib/commonjs/specs/NativePaymentMethodMessagingElement.js.map +1 -1
- package/lib/commonjs/specs/NativeStripeContainer.js +1 -1
- package/lib/commonjs/specs/NativeStripeSdkModule.js.map +1 -1
- package/lib/commonjs/types/Checkout.js +2 -0
- package/lib/commonjs/types/Checkout.js.map +1 -0
- package/lib/commonjs/types/EmbeddedPaymentElement.js +1 -1
- package/lib/commonjs/types/EmbeddedPaymentElement.js.map +1 -1
- package/lib/commonjs/types/Onramp.js.map +1 -1
- package/lib/commonjs/types/PaymentIntent.js.map +1 -1
- package/lib/commonjs/types/PaymentSheet.js.map +1 -1
- package/lib/module/components/AddToWalletButton.js +1 -1
- package/lib/module/components/AddToWalletButton.js.map +1 -1
- package/lib/module/components/AddressSheet.js +1 -1
- package/lib/module/components/AddressSheet.js.map +1 -1
- package/lib/module/components/AuBECSDebitForm.js +1 -1
- package/lib/module/components/AuBECSDebitForm.js.map +1 -1
- package/lib/module/components/CardField.js +1 -1
- package/lib/module/components/CardField.js.map +1 -1
- package/lib/module/components/CardForm.js +1 -1
- package/lib/module/components/CardForm.js.map +1 -1
- package/lib/module/components/CurrencySelectorElement.js +2 -0
- package/lib/module/components/CurrencySelectorElement.js.map +1 -0
- package/lib/module/components/PaymentMethodMessagingElement.js +2 -0
- package/lib/module/components/PaymentMethodMessagingElement.js.map +1 -0
- package/lib/module/components/PlatformPayButton.js +1 -1
- package/lib/module/components/PlatformPayButton.js.map +1 -1
- package/lib/module/components/StripeContainer.js +1 -1
- package/lib/module/components/StripeContainer.js.map +1 -1
- package/lib/module/components/StripeProvider.js +1 -1
- package/lib/module/components/StripeProvider.js.map +1 -1
- package/lib/module/connect/Components.js +1 -1
- package/lib/module/connect/Components.js.map +1 -1
- package/lib/module/connect/ConnectComponentsProvider.js +1 -1
- package/lib/module/connect/ConnectComponentsProvider.js.map +1 -1
- package/lib/module/connect/EmbeddedComponent.js +1 -1
- package/lib/module/connect/EmbeddedComponent.js.map +1 -1
- package/lib/module/connect/ModalCloseButton.js +1 -1
- package/lib/module/connect/ModalCloseButton.js.map +1 -1
- package/lib/module/connect/NavigationBar.js +1 -1
- package/lib/module/connect/NavigationBar.js.map +1 -1
- package/lib/module/connect/testUtils.js +1 -1
- package/lib/module/connect/testUtils.js.map +1 -1
- package/lib/module/events.js +1 -1
- package/lib/module/events.js.map +1 -1
- package/lib/module/functions.js +1 -1
- package/lib/module/functions.js.map +1 -1
- package/lib/module/helpers.js +1 -1
- package/lib/module/hooks/useCheckout.js +2 -0
- package/lib/module/hooks/useCheckout.js.map +1 -0
- package/lib/module/hooks/useOnramp.js +1 -1
- package/lib/module/hooks/useOnramp.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/specs/NativeAddToWalletButton.js +1 -1
- package/lib/module/specs/NativeAddressSheet.js +1 -1
- package/lib/module/specs/NativeApplePayButton.js +1 -1
- package/lib/module/specs/NativeAuBECSDebitForm.js +1 -1
- package/lib/module/specs/NativeCardField.js +1 -1
- package/lib/module/specs/NativeCardField.js.map +1 -1
- package/lib/module/specs/NativeCardForm.js +1 -1
- package/lib/module/specs/NativeCardForm.js.map +1 -1
- package/lib/module/specs/NativeConnectAccountOnboardingView.js +1 -1
- package/lib/module/specs/NativeCurrencySelectorElement.js +2 -0
- package/lib/module/specs/NativeCurrencySelectorElement.js.map +1 -0
- package/lib/module/specs/NativeEmbeddedPaymentElement.js +1 -1
- package/lib/module/specs/NativeEmbeddedPaymentElement.js.map +1 -1
- package/lib/module/specs/NativeGooglePayButton.js +1 -1
- package/lib/module/specs/NativeNavigationBar.js +1 -1
- package/lib/module/specs/NativeOnrampSdkModule.js +1 -1
- package/lib/module/specs/NativeOnrampSdkModule.js.map +1 -1
- package/lib/module/specs/NativePaymentMethodMessagingElement.js +1 -1
- package/lib/module/specs/NativePaymentMethodMessagingElement.js.map +1 -1
- package/lib/module/specs/NativeStripeContainer.js +1 -1
- package/lib/module/specs/NativeStripeSdkModule.js.map +1 -1
- package/lib/module/types/Checkout.js +2 -0
- package/lib/module/types/Checkout.js.map +1 -0
- package/lib/module/types/EmbeddedPaymentElement.js +1 -1
- package/lib/module/types/EmbeddedPaymentElement.js.map +1 -1
- package/lib/module/types/Onramp.js.map +1 -1
- package/lib/module/types/PaymentIntent.js.map +1 -1
- package/lib/module/types/PaymentSheet.js.map +1 -1
- package/lib/typescript/src/components/CurrencySelectorElement.d.ts +62 -0
- package/lib/typescript/src/components/CurrencySelectorElement.d.ts.map +1 -0
- package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts +41 -0
- package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts.map +1 -0
- package/lib/typescript/src/connect/testUtils.d.ts +4 -0
- package/lib/typescript/src/connect/testUtils.d.ts.map +1 -1
- package/lib/typescript/src/events.d.ts +11 -0
- package/lib/typescript/src/events.d.ts.map +1 -1
- package/lib/typescript/src/functions.d.ts +2 -0
- package/lib/typescript/src/functions.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useCheckout.d.ts +21 -0
- package/lib/typescript/src/hooks/useCheckout.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useOnramp.d.ts +9 -3
- package/lib/typescript/src/hooks/useOnramp.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +3 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts +25 -0
- package/lib/typescript/src/specs/NativeCurrencySelectorElement.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts +5 -1
- package/lib/typescript/src/specs/NativeEmbeddedPaymentElement.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts +1 -1
- package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativePaymentMethodMessagingElement.d.ts +1 -6
- package/lib/typescript/src/specs/NativePaymentMethodMessagingElement.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +19 -2
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts.map +1 -1
- package/lib/typescript/src/types/Checkout.d.ts +336 -0
- package/lib/typescript/src/types/Checkout.d.ts.map +1 -0
- package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts +36 -1
- package/lib/typescript/src/types/EmbeddedPaymentElement.d.ts.map +1 -1
- package/lib/typescript/src/types/NextAction.d.ts +8 -1
- package/lib/typescript/src/types/NextAction.d.ts.map +1 -1
- package/lib/typescript/src/types/Onramp.d.ts +40 -1
- package/lib/typescript/src/types/Onramp.d.ts.map +1 -1
- package/lib/typescript/src/types/PaymentIntent.d.ts +11 -1
- package/lib/typescript/src/types/PaymentIntent.d.ts.map +1 -1
- package/lib/typescript/src/types/PaymentMethod.d.ts +10 -6
- package/lib/typescript/src/types/PaymentMethod.d.ts.map +1 -1
- package/lib/typescript/src/types/PaymentSheet.d.ts +22 -6
- package/lib/typescript/src/types/PaymentSheet.d.ts.map +1 -1
- package/lib/typescript/src/types/components/PaymentMethodMessagingElementComponent.d.ts +16 -1
- package/lib/typescript/src/types/components/PaymentMethodMessagingElementComponent.d.ts.map +1 -1
- package/package.json +21 -7
- package/src/components/CurrencySelectorElement.tsx +95 -0
- package/src/components/PaymentMethodMessagingElement.tsx +109 -0
- package/src/components/StripeProvider.tsx +1 -1
- package/src/connect/testUtils.ts +2 -0
- package/src/events.ts +20 -3
- package/src/functions.ts +31 -2
- package/src/hooks/useCheckout.tsx +207 -0
- package/src/hooks/useOnramp.tsx +45 -24
- package/src/index.tsx +4 -0
- package/src/specs/NativeCurrencySelectorElement.ts +35 -0
- package/src/specs/NativeEmbeddedPaymentElement.ts +12 -2
- package/src/specs/NativeOnrampSdkModule.ts +1 -1
- package/src/specs/NativePaymentMethodMessagingElement.ts +0 -7
- package/src/specs/NativeStripeSdkModule.ts +61 -2
- package/src/types/Checkout.ts +377 -0
- package/src/types/EmbeddedPaymentElement.tsx +117 -26
- package/src/types/NextAction.ts +9 -0
- package/src/types/Onramp.ts +45 -1
- package/src/types/PaymentIntent.ts +10 -0
- package/src/types/PaymentMethod.ts +9 -6
- package/src/types/PaymentSheet.ts +29 -6
- package/src/types/components/PaymentMethodMessagingElementComponent.tsx +17 -1
- package/stripe-react-native.podspec +8 -8
- package/android/spotless.gradle +0 -19
- package/android/src/main/java/com/reactnativestripesdk/FakeOnrampSdkModule.kt +0 -155
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
package com.reactnativestripesdk.utils
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableArray
|
|
5
|
+
import com.facebook.react.bridge.WritableMap
|
|
6
|
+
import com.stripe.android.checkout.Checkout
|
|
7
|
+
import com.stripe.android.checkout.CheckoutSession
|
|
8
|
+
import com.stripe.android.paymentelement.CheckoutSessionPreview
|
|
9
|
+
|
|
10
|
+
@OptIn(CheckoutSessionPreview::class)
|
|
11
|
+
internal fun mapFromCheckoutState(checkout: Checkout): WritableMap =
|
|
12
|
+
mapFromCheckoutState(
|
|
13
|
+
isLoading = checkout.isLoading.value,
|
|
14
|
+
session = checkout.checkoutSession.value,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
@OptIn(CheckoutSessionPreview::class)
|
|
18
|
+
internal fun mapFromCheckoutState(
|
|
19
|
+
isLoading: Boolean,
|
|
20
|
+
session: CheckoutSession,
|
|
21
|
+
): WritableMap =
|
|
22
|
+
Arguments.createMap().apply {
|
|
23
|
+
putString("status", if (isLoading) "loading" else "loaded")
|
|
24
|
+
putMap("session", mapFromCheckoutSession(session))
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@OptIn(CheckoutSessionPreview::class)
|
|
28
|
+
private fun mapFromCheckoutSession(
|
|
29
|
+
session: CheckoutSession,
|
|
30
|
+
): WritableMap =
|
|
31
|
+
Arguments.createMap().apply {
|
|
32
|
+
putString("id", session.id)
|
|
33
|
+
// TODO(CheckoutSessionsPreview): Populate from public Android checkout fields once
|
|
34
|
+
// stripe-android exposes status, paymentStatus, and livemode on CheckoutSession.
|
|
35
|
+
putString("status", "unknown")
|
|
36
|
+
putString("paymentStatus", "unknown")
|
|
37
|
+
putBoolean("livemode", false)
|
|
38
|
+
|
|
39
|
+
if (session.currency.isNotBlank()) {
|
|
40
|
+
putString("currency", session.currency)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
session.totalSummary?.let { putMap("totals", mapFromCheckoutTotals(it)) }
|
|
44
|
+
putArray("lineItems", mapFromCheckoutLineItems(session))
|
|
45
|
+
putArray("shippingOptions", mapFromCheckoutShippingOptions(session))
|
|
46
|
+
|
|
47
|
+
// TODO(CheckoutSessionsPreview): Populate top-level discounts once stripe-android
|
|
48
|
+
// exposes them directly instead of only exposing TotalSummary.discountAmounts.
|
|
49
|
+
putArray("discounts", Arguments.createArray())
|
|
50
|
+
|
|
51
|
+
// TODO(CheckoutSessionsPreview): Populate customerId, customerEmail, billingAddress,
|
|
52
|
+
// and shippingAddress once stripe-android exposes them on public checkout models.
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@OptIn(CheckoutSessionPreview::class)
|
|
56
|
+
private fun mapFromCheckoutTotals(totals: CheckoutSession.TotalSummary): WritableMap {
|
|
57
|
+
val taxTotal = totals.taxAmounts.sumOf { it.amount }
|
|
58
|
+
|
|
59
|
+
return Arguments.createMap().apply {
|
|
60
|
+
putDouble("subtotal", totals.subtotal.toDouble())
|
|
61
|
+
putDouble("total", totals.totalAmountDue.toDouble())
|
|
62
|
+
putDouble("due", totals.totalDueToday.toDouble())
|
|
63
|
+
// TODO(CheckoutSessionsPreview): Populate the top-level discount total once the
|
|
64
|
+
// Android TotalSummary model exposes it directly.
|
|
65
|
+
putDouble("discount", 0.0)
|
|
66
|
+
putDouble("shipping", (totals.shippingRate?.amount ?: 0L).toDouble())
|
|
67
|
+
putDouble("tax", taxTotal.toDouble())
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@OptIn(CheckoutSessionPreview::class)
|
|
72
|
+
private fun mapFromCheckoutLineItems(session: CheckoutSession): WritableArray =
|
|
73
|
+
Arguments.createArray().apply {
|
|
74
|
+
session.lineItems.forEach { item ->
|
|
75
|
+
pushMap(
|
|
76
|
+
Arguments.createMap().apply {
|
|
77
|
+
putString("id", item.id)
|
|
78
|
+
putString("name", item.name)
|
|
79
|
+
putInt("quantity", item.quantity)
|
|
80
|
+
putDouble("unitAmount", (item.unitAmount ?: 0L).toDouble())
|
|
81
|
+
putString("currency", session.currency)
|
|
82
|
+
},
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@OptIn(CheckoutSessionPreview::class)
|
|
88
|
+
private fun mapFromCheckoutShippingOptions(session: CheckoutSession): WritableArray =
|
|
89
|
+
Arguments.createArray().apply {
|
|
90
|
+
session.shippingOptions.forEach { option ->
|
|
91
|
+
pushMap(
|
|
92
|
+
Arguments.createMap().apply {
|
|
93
|
+
putString("id", option.id)
|
|
94
|
+
putString("displayName", option.displayName)
|
|
95
|
+
putDouble("amount", option.amount.toDouble())
|
|
96
|
+
putString("currency", session.currency)
|
|
97
|
+
option.deliveryEstimate?.let { putString("deliveryEstimate", it) }
|
|
98
|
+
},
|
|
99
|
+
)
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -186,14 +186,16 @@ internal fun createError(
|
|
|
186
186
|
return mapError(code, error.message, error.localizedMessage, null, null, null)
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
internal fun createCanceledError(message: String? = null): WritableMap =
|
|
189
|
+
internal fun createCanceledError(message: String? = null): WritableMap =
|
|
190
|
+
createError(ErrorType.Canceled.toString(), message)
|
|
190
191
|
|
|
191
192
|
internal fun createFailedError(error: Throwable): WritableMap = createError(ErrorType.Failed.toString(), error)
|
|
192
193
|
|
|
193
194
|
internal fun createMissingInitError(): WritableMap =
|
|
194
195
|
createError(
|
|
195
196
|
ErrorType.Failed.toString(),
|
|
196
|
-
"Stripe has not been initialized. Initialize Stripe in your app with the StripeProvider component
|
|
197
|
+
"Stripe has not been initialized. Initialize Stripe in your app with the StripeProvider component " +
|
|
198
|
+
"or the initStripe method.",
|
|
197
199
|
)
|
|
198
200
|
|
|
199
201
|
internal fun createOnrampNotConfiguredError(): WritableMap =
|
|
@@ -27,7 +27,11 @@ fun View.hideSoftKeyboard() {
|
|
|
27
27
|
fun ReadableMap?.getBooleanOr(
|
|
28
28
|
key: String,
|
|
29
29
|
default: Boolean,
|
|
30
|
-
): Boolean = if (this?.hasKey(key) == true && this.getType(key) == ReadableType.Boolean)
|
|
30
|
+
): Boolean = if (this?.hasKey(key) == true && this.getType(key) == ReadableType.Boolean) {
|
|
31
|
+
this.getBoolean(key)
|
|
32
|
+
} else {
|
|
33
|
+
default
|
|
34
|
+
}
|
|
31
35
|
|
|
32
36
|
fun ReadableMap?.getIntOrNull(key: String): Int? =
|
|
33
37
|
if (this?.hasKey(key) == true && this.getType(key) == ReadableType.Number) this.getInt(key) else null
|
|
@@ -140,10 +140,10 @@ internal fun mapPaymentMethodType(type: PaymentMethod.Type?): String =
|
|
|
140
140
|
PaymentMethod.Type.GrabPay -> "GrabPay"
|
|
141
141
|
PaymentMethod.Type.Ideal -> "Ideal"
|
|
142
142
|
PaymentMethod.Type.Netbanking -> "Netbanking"
|
|
143
|
+
PaymentMethod.Type.Multibanco -> "Multibanco"
|
|
143
144
|
PaymentMethod.Type.Oxxo -> "Oxxo"
|
|
144
145
|
PaymentMethod.Type.P24 -> "P24"
|
|
145
146
|
PaymentMethod.Type.SepaDebit -> "SepaDebit"
|
|
146
|
-
PaymentMethod.Type.Upi -> "Upi"
|
|
147
147
|
PaymentMethod.Type.WeChatPay -> "WeChatPay"
|
|
148
148
|
PaymentMethod.Type.Klarna -> "Klarna"
|
|
149
149
|
PaymentMethod.Type.USBankAccount -> "USBankAccount"
|
|
@@ -171,10 +171,10 @@ internal fun mapToPaymentMethodType(type: String?): PaymentMethod.Type? =
|
|
|
171
171
|
"Fpx" -> PaymentMethod.Type.Fpx
|
|
172
172
|
"GrabPay" -> PaymentMethod.Type.GrabPay
|
|
173
173
|
"Netbanking" -> PaymentMethod.Type.Netbanking
|
|
174
|
+
"Multibanco" -> PaymentMethod.Type.Multibanco
|
|
174
175
|
"Oxxo" -> PaymentMethod.Type.Oxxo
|
|
175
176
|
"P24" -> PaymentMethod.Type.P24
|
|
176
177
|
"SepaDebit" -> PaymentMethod.Type.SepaDebit
|
|
177
|
-
"Upi" -> PaymentMethod.Type.Upi
|
|
178
178
|
"WeChatPay" -> PaymentMethod.Type.WeChatPay
|
|
179
179
|
"Klarna" -> PaymentMethod.Type.Klarna
|
|
180
180
|
"USBankAccount" -> PaymentMethod.Type.USBankAccount
|
|
@@ -205,7 +205,9 @@ internal fun mapFromBillingDetails(billingDatails: PaymentMethod.BillingDetails?
|
|
|
205
205
|
return details
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
-
internal fun mapFromPaymentSheetBillingDetails(
|
|
208
|
+
internal fun mapFromPaymentSheetBillingDetails(
|
|
209
|
+
billing: com.stripe.android.paymentsheet.PaymentSheet.BillingDetails?
|
|
210
|
+
): WritableMap {
|
|
209
211
|
val details = Arguments.createMap()
|
|
210
212
|
details.putString("name", billing?.name)
|
|
211
213
|
details.putString("email", billing?.email)
|
|
@@ -434,7 +436,6 @@ internal fun mapFromPaymentMethod(paymentMethod: PaymentMethod): WritableMap {
|
|
|
434
436
|
it.putString("bank", paymentMethod.fpx?.bank)
|
|
435
437
|
},
|
|
436
438
|
)
|
|
437
|
-
pm.putMap("Upi", Arguments.createMap().also { it.putString("vpa", paymentMethod.upi?.vpa) })
|
|
438
439
|
pm.putMap(
|
|
439
440
|
"USBankAccount",
|
|
440
441
|
Arguments.createMap().also {
|
|
@@ -558,7 +559,6 @@ internal fun mapNextAction(
|
|
|
558
559
|
NextActionType.CashAppRedirect,
|
|
559
560
|
NextActionType.BlikAuthorize,
|
|
560
561
|
NextActionType.UseStripeSdk,
|
|
561
|
-
NextActionType.UpiAwaitNotification,
|
|
562
562
|
NextActionType.DisplayPayNowDetails,
|
|
563
563
|
NextActionType.DisplayPromptPayDetails,
|
|
564
564
|
null,
|
|
@@ -714,7 +714,7 @@ internal fun mapToShippingDetails(shippingDetails: ReadableMap?): ConfirmPayment
|
|
|
714
714
|
)
|
|
715
715
|
}
|
|
716
716
|
|
|
717
|
-
private fun convertToUnixTimestamp(timestamp: Long): String = (timestamp *
|
|
717
|
+
private fun convertToUnixTimestamp(timestamp: Long): String = (timestamp * SECONDS_TO_MILLIS).toString()
|
|
718
718
|
|
|
719
719
|
fun mapToUICustomization(params: ReadableMap): PaymentAuthConfig.Stripe3ds2UiCustomization {
|
|
720
720
|
val labelCustomization = params.getMap("label")
|
|
@@ -966,15 +966,15 @@ internal fun mapToPreferredNetworks(networksAsInts: List<Int>?): List<CardBrand>
|
|
|
966
966
|
|
|
967
967
|
val intToCardBrand =
|
|
968
968
|
mapOf(
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
969
|
+
CARD_BRAND_JCB to CardBrand.JCB,
|
|
970
|
+
CARD_BRAND_AMEX to CardBrand.AmericanExpress,
|
|
971
|
+
CARD_BRAND_CARTES_BANCAIRES to CardBrand.CartesBancaires,
|
|
972
|
+
CARD_BRAND_DINERS_CLUB to CardBrand.DinersClub,
|
|
973
|
+
CARD_BRAND_DISCOVER to CardBrand.Discover,
|
|
974
|
+
CARD_BRAND_MASTERCARD to CardBrand.MasterCard,
|
|
975
|
+
CARD_BRAND_UNION_PAY to CardBrand.UnionPay,
|
|
976
|
+
CARD_BRAND_VISA to CardBrand.Visa,
|
|
977
|
+
CARD_BRAND_UNKNOWN to CardBrand.Unknown,
|
|
978
978
|
)
|
|
979
979
|
|
|
980
980
|
return networksAsInts.mapNotNull { intToCardBrand[it] }
|
|
@@ -1036,7 +1036,9 @@ private fun Map<String, Any?>.toReadableMap(): ReadableMap {
|
|
|
1036
1036
|
}
|
|
1037
1037
|
|
|
1038
1038
|
@SuppressLint("RestrictedApi")
|
|
1039
|
-
internal fun parseCustomPaymentMethods(
|
|
1039
|
+
internal fun parseCustomPaymentMethods(
|
|
1040
|
+
customPaymentMethodConfig: ReadableMap?
|
|
1041
|
+
): List<PaymentSheet.CustomPaymentMethod> {
|
|
1040
1042
|
if (customPaymentMethodConfig == null) {
|
|
1041
1043
|
return emptyList()
|
|
1042
1044
|
}
|
|
@@ -1049,7 +1051,8 @@ internal fun parseCustomPaymentMethods(customPaymentMethodConfig: ReadableMap?):
|
|
|
1049
1051
|
val id = customPaymentMethodMap.getString("id")
|
|
1050
1052
|
if (id != null) {
|
|
1051
1053
|
val subtitle = customPaymentMethodMap.getString("subtitle")
|
|
1052
|
-
val disableBillingDetailCollection = customPaymentMethodMap
|
|
1054
|
+
val disableBillingDetailCollection = customPaymentMethodMap
|
|
1055
|
+
.getBooleanOr("disableBillingDetailCollection", false)
|
|
1053
1056
|
result.add(
|
|
1054
1057
|
PaymentSheet.CustomPaymentMethod(
|
|
1055
1058
|
id = id,
|
|
@@ -1192,3 +1195,14 @@ fun readableArrayOf(vararg elements: Any?): ReadableArray =
|
|
|
1192
1195
|
}
|
|
1193
1196
|
}
|
|
1194
1197
|
}
|
|
1198
|
+
|
|
1199
|
+
private const val SECONDS_TO_MILLIS = 1000
|
|
1200
|
+
private const val CARD_BRAND_JCB = 0
|
|
1201
|
+
private const val CARD_BRAND_AMEX = 1
|
|
1202
|
+
private const val CARD_BRAND_CARTES_BANCAIRES = 2
|
|
1203
|
+
private const val CARD_BRAND_DINERS_CLUB = 3
|
|
1204
|
+
private const val CARD_BRAND_DISCOVER = 4
|
|
1205
|
+
private const val CARD_BRAND_MASTERCARD = 5
|
|
1206
|
+
private const val CARD_BRAND_UNION_PAY = 6
|
|
1207
|
+
private const val CARD_BRAND_VISA = 7
|
|
1208
|
+
private const val CARD_BRAND_UNKNOWN = 8
|
|
@@ -2,7 +2,8 @@ package com.reactnativestripesdk.utils
|
|
|
2
2
|
|
|
3
3
|
class PostalCodeUtilities {
|
|
4
4
|
companion object {
|
|
5
|
-
internal fun isValidGlobalPostalCodeCharacter(c: Char): Boolean =
|
|
5
|
+
internal fun isValidGlobalPostalCodeCharacter(c: Char): Boolean =
|
|
6
|
+
Character.isLetterOrDigit(c) || c.isWhitespace() || c == '-'
|
|
6
7
|
|
|
7
8
|
internal fun isValidUsPostalCodeCharacter(c: Char): Boolean = Character.isDigit(c) || c.isWhitespace() || c == '-'
|
|
8
9
|
}
|
|
@@ -30,6 +30,9 @@ public class EmbeddedPaymentElementViewManagerDelegate<T extends View, U extends
|
|
|
30
30
|
case "intentConfiguration":
|
|
31
31
|
mViewManager.setIntentConfiguration(view, new DynamicFromObject(value));
|
|
32
32
|
break;
|
|
33
|
+
case "checkout":
|
|
34
|
+
mViewManager.setCheckout(view, new DynamicFromObject(value));
|
|
35
|
+
break;
|
|
33
36
|
default:
|
|
34
37
|
super.setProperty(view, propName, value);
|
|
35
38
|
}
|
|
@@ -47,6 +50,9 @@ public class EmbeddedPaymentElementViewManagerDelegate<T extends View, U extends
|
|
|
47
50
|
case "update":
|
|
48
51
|
mViewManager.update(view, args != null ? args.getString(0) : null);
|
|
49
52
|
break;
|
|
53
|
+
case "updateWithCheckout":
|
|
54
|
+
mViewManager.updateWithCheckout(view, args != null ? args.getString(0) : null);
|
|
55
|
+
break;
|
|
50
56
|
}
|
|
51
57
|
}
|
|
52
58
|
}
|
|
@@ -16,7 +16,9 @@ import com.facebook.react.bridge.Dynamic;
|
|
|
16
16
|
public interface EmbeddedPaymentElementViewManagerInterface<T extends View> {
|
|
17
17
|
void setConfiguration(T view, Dynamic value);
|
|
18
18
|
void setIntentConfiguration(T view, Dynamic value);
|
|
19
|
+
void setCheckout(T view, Dynamic value);
|
|
19
20
|
void confirm(T view);
|
|
20
21
|
void clearPaymentOption(T view);
|
|
21
22
|
void update(T view, @Nullable String intentConfigurationJson);
|
|
23
|
+
void updateWithCheckout(T view, @Nullable String sessionKey);
|
|
22
24
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
3
|
+
*
|
|
4
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
5
|
+
* once the code is regenerated.
|
|
6
|
+
*
|
|
7
|
+
* @generated by codegen project: GeneratePropsJavaDelegate.js
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
package com.facebook.react.viewmanagers;
|
|
11
|
+
|
|
12
|
+
import android.view.View;
|
|
13
|
+
import androidx.annotation.Nullable;
|
|
14
|
+
import com.facebook.react.uimanager.BaseViewManager;
|
|
15
|
+
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
|
16
|
+
import com.facebook.react.uimanager.LayoutShadowNode;
|
|
17
|
+
|
|
18
|
+
public class StripeCurrencySelectorElementManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & StripeCurrencySelectorElementManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
|
|
19
|
+
public StripeCurrencySelectorElementManagerDelegate(U viewManager) {
|
|
20
|
+
super(viewManager);
|
|
21
|
+
}
|
|
22
|
+
@Override
|
|
23
|
+
public void setProperty(T view, String propName, @Nullable Object value) {
|
|
24
|
+
switch (propName) {
|
|
25
|
+
case "sessionKey":
|
|
26
|
+
mViewManager.setSessionKey(view, value == null ? null : (String) value);
|
|
27
|
+
break;
|
|
28
|
+
case "disabled":
|
|
29
|
+
mViewManager.setDisabled(view, value == null ? false : (boolean) value);
|
|
30
|
+
break;
|
|
31
|
+
default:
|
|
32
|
+
super.setProperty(view, propName, value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
3
|
+
*
|
|
4
|
+
* Do not edit this file as changes may cause incorrect behavior and will be lost
|
|
5
|
+
* once the code is regenerated.
|
|
6
|
+
*
|
|
7
|
+
* @generated by codegen project: GeneratePropsJavaInterface.js
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
package com.facebook.react.viewmanagers;
|
|
11
|
+
|
|
12
|
+
import android.view.View;
|
|
13
|
+
import androidx.annotation.Nullable;
|
|
14
|
+
|
|
15
|
+
public interface StripeCurrencySelectorElementManagerInterface<T extends View> {
|
|
16
|
+
void setSessionKey(T view, @Nullable String value);
|
|
17
|
+
void setDisabled(T view, boolean value);
|
|
18
|
+
}
|
|
@@ -253,6 +253,10 @@ public abstract class NativeStripeSdkModuleSpec extends ReactContextBaseJavaModu
|
|
|
253
253
|
@DoNotStrip
|
|
254
254
|
public abstract void createEmbeddedPaymentElement(ReadableMap intentConfig, ReadableMap configuration, Promise promise);
|
|
255
255
|
|
|
256
|
+
@ReactMethod
|
|
257
|
+
@DoNotStrip
|
|
258
|
+
public abstract void createEmbeddedPaymentElementWithCheckout(String sessionKey, ReadableMap configuration, Promise promise);
|
|
259
|
+
|
|
256
260
|
@ReactMethod
|
|
257
261
|
@DoNotStrip
|
|
258
262
|
public abstract void confirmEmbeddedPaymentElement(double viewTag, Promise promise);
|
|
@@ -261,6 +265,10 @@ public abstract class NativeStripeSdkModuleSpec extends ReactContextBaseJavaModu
|
|
|
261
265
|
@DoNotStrip
|
|
262
266
|
public abstract void updateEmbeddedPaymentElement(ReadableMap intentConfig, Promise promise);
|
|
263
267
|
|
|
268
|
+
@ReactMethod
|
|
269
|
+
@DoNotStrip
|
|
270
|
+
public abstract void updateEmbeddedPaymentElementWithCheckout(String sessionKey, Promise promise);
|
|
271
|
+
|
|
264
272
|
@ReactMethod
|
|
265
273
|
@DoNotStrip
|
|
266
274
|
public abstract void clearEmbeddedPaymentOption(double viewTag, Promise promise);
|
|
@@ -293,6 +301,42 @@ public abstract class NativeStripeSdkModuleSpec extends ReactContextBaseJavaModu
|
|
|
293
301
|
@DoNotStrip
|
|
294
302
|
public abstract void pollAndClearPendingStripeConnectUrls(Promise promise);
|
|
295
303
|
|
|
304
|
+
@ReactMethod
|
|
305
|
+
@DoNotStrip
|
|
306
|
+
public abstract void initCheckoutSession(String clientSecret, ReadableMap configuration, Promise promise);
|
|
307
|
+
|
|
308
|
+
@ReactMethod
|
|
309
|
+
@DoNotStrip
|
|
310
|
+
public abstract void checkoutUpdateShippingAddress(String sessionKey, ReadableMap address, @Nullable String name, @Nullable String phone, Promise promise);
|
|
311
|
+
|
|
312
|
+
@ReactMethod
|
|
313
|
+
@DoNotStrip
|
|
314
|
+
public abstract void checkoutUpdateBillingAddress(String sessionKey, ReadableMap address, @Nullable String name, @Nullable String phone, Promise promise);
|
|
315
|
+
|
|
316
|
+
@ReactMethod
|
|
317
|
+
@DoNotStrip
|
|
318
|
+
public abstract void checkoutApplyPromotionCode(String sessionKey, String code, Promise promise);
|
|
319
|
+
|
|
320
|
+
@ReactMethod
|
|
321
|
+
@DoNotStrip
|
|
322
|
+
public abstract void checkoutRemovePromotionCode(String sessionKey, Promise promise);
|
|
323
|
+
|
|
324
|
+
@ReactMethod
|
|
325
|
+
@DoNotStrip
|
|
326
|
+
public abstract void checkoutUpdateLineItemQuantity(String sessionKey, String lineItemId, double quantity, Promise promise);
|
|
327
|
+
|
|
328
|
+
@ReactMethod
|
|
329
|
+
@DoNotStrip
|
|
330
|
+
public abstract void checkoutSelectShippingOption(String sessionKey, String id, Promise promise);
|
|
331
|
+
|
|
332
|
+
@ReactMethod
|
|
333
|
+
@DoNotStrip
|
|
334
|
+
public abstract void checkoutUpdateTaxId(String sessionKey, String type, String value, Promise promise);
|
|
335
|
+
|
|
336
|
+
@ReactMethod
|
|
337
|
+
@DoNotStrip
|
|
338
|
+
public abstract void checkoutRefresh(String sessionKey, Promise promise);
|
|
339
|
+
|
|
296
340
|
@ReactMethod
|
|
297
341
|
@DoNotStrip
|
|
298
342
|
public abstract void addListener(String eventType);
|
|
@@ -4,8 +4,10 @@ package com.reactnativestripesdk
|
|
|
4
4
|
|
|
5
5
|
import android.annotation.SuppressLint
|
|
6
6
|
import androidx.compose.ui.graphics.Color
|
|
7
|
+
import com.facebook.react.bridge.Arguments
|
|
7
8
|
import com.facebook.react.bridge.ReadableMap
|
|
8
9
|
import com.stripe.android.crypto.onramp.ExperimentalCryptoOnramp
|
|
10
|
+
import com.stripe.android.crypto.onramp.model.KycInfo
|
|
9
11
|
import com.stripe.android.crypto.onramp.model.OnrampConfiguration
|
|
10
12
|
import com.stripe.android.crypto.onramp.model.PaymentMethodDisplayData
|
|
11
13
|
import com.stripe.android.googlepaylauncher.GooglePayEnvironment
|
|
@@ -14,6 +16,8 @@ import com.stripe.android.link.LinkAppearance
|
|
|
14
16
|
import com.stripe.android.link.LinkAppearance.Colors
|
|
15
17
|
import com.stripe.android.link.LinkAppearance.PrimaryButton
|
|
16
18
|
import com.stripe.android.link.LinkAppearance.Style
|
|
19
|
+
import com.stripe.android.model.DateOfBirth
|
|
20
|
+
import com.stripe.android.paymentsheet.PaymentSheet
|
|
17
21
|
|
|
18
22
|
@SuppressLint("RestrictedApi")
|
|
19
23
|
internal fun mapConfig(
|
|
@@ -50,6 +54,8 @@ internal fun mapGooglePayConfig(params: ReadableMap?): GooglePayPaymentMethodLau
|
|
|
50
54
|
val merchantName = params.getString("merchantName") ?: return null
|
|
51
55
|
val existingPaymentMethodRequired =
|
|
52
56
|
params.hasKey("existingPaymentMethodRequired") && params.getBoolean("existingPaymentMethodRequired")
|
|
57
|
+
val isEmailRequired = if (params.hasKey("isEmailRequired")) params.getBoolean("isEmailRequired") else false
|
|
58
|
+
val allowCreditCards = if (params.hasKey("allowCreditCards")) params.getBoolean("allowCreditCards") else true
|
|
53
59
|
|
|
54
60
|
val billingAddressConfig =
|
|
55
61
|
mapGooglePayBillingAddressConfig(params.getMap("billingAddressConfig"))
|
|
@@ -58,6 +64,8 @@ internal fun mapGooglePayConfig(params: ReadableMap?): GooglePayPaymentMethodLau
|
|
|
58
64
|
environment = if (testEnv) GooglePayEnvironment.Test else GooglePayEnvironment.Production,
|
|
59
65
|
merchantCountryCode = merchantCountryCode,
|
|
60
66
|
merchantName = merchantName,
|
|
67
|
+
isEmailRequired = isEmailRequired,
|
|
68
|
+
allowCreditCards = allowCreditCards,
|
|
61
69
|
billingAddressConfig = billingAddressConfig,
|
|
62
70
|
existingPaymentMethodRequired = existingPaymentMethodRequired,
|
|
63
71
|
)
|
|
@@ -159,3 +167,38 @@ internal fun mapPaymentDetailsType(type: PaymentMethodDisplayData.Type): String
|
|
|
159
167
|
PaymentMethodDisplayData.Type.BankAccount -> "BankAccount"
|
|
160
168
|
PaymentMethodDisplayData.Type.GooglePay -> "GooglePay"
|
|
161
169
|
}
|
|
170
|
+
|
|
171
|
+
@OptIn(ExperimentalCryptoOnramp::class)
|
|
172
|
+
@SuppressLint("RestrictedApi")
|
|
173
|
+
internal fun mapFromKycInfo(kycInfo: KycInfo): ReadableMap {
|
|
174
|
+
val result = Arguments.createMap()
|
|
175
|
+
|
|
176
|
+
kycInfo.firstName?.let { result.putString("firstName", it) }
|
|
177
|
+
kycInfo.lastName?.let { result.putString("lastName", it) }
|
|
178
|
+
kycInfo.idNumber?.let { result.putString("idNumber", it) }
|
|
179
|
+
kycInfo.address?.let { result.putMap("address", mapFromKycAddress(it)) }
|
|
180
|
+
kycInfo.dateOfBirth?.let { result.putMap("dateOfBirth", mapFromDateOfBirth(it)) }
|
|
181
|
+
|
|
182
|
+
return result
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private fun mapFromKycAddress(address: PaymentSheet.Address): ReadableMap {
|
|
186
|
+
val result = Arguments.createMap()
|
|
187
|
+
|
|
188
|
+
address.city?.let { result.putString("city", it) }
|
|
189
|
+
address.country?.let { result.putString("country", it) }
|
|
190
|
+
address.line1?.let { result.putString("line1", it) }
|
|
191
|
+
address.line2?.let { result.putString("line2", it) }
|
|
192
|
+
address.postalCode?.let { result.putString("postalCode", it) }
|
|
193
|
+
address.state?.let { result.putString("state", it) }
|
|
194
|
+
|
|
195
|
+
return result
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
private fun mapFromDateOfBirth(dateOfBirth: DateOfBirth): ReadableMap {
|
|
199
|
+
val result = Arguments.createMap()
|
|
200
|
+
result.putInt("day", dateOfBirth.day)
|
|
201
|
+
result.putInt("month", dateOfBirth.month)
|
|
202
|
+
result.putInt("year", dateOfBirth.year)
|
|
203
|
+
return result
|
|
204
|
+
}
|
|
@@ -418,6 +418,7 @@ class OnrampSdkModule(
|
|
|
418
418
|
}
|
|
419
419
|
val currencyCode = googlePayParams.getString("currencyCode") ?: ""
|
|
420
420
|
val amount = googlePayParams.getDouble("amount").toLong()
|
|
421
|
+
|
|
421
422
|
val transactionId = googlePayParams.getString("transactionId")
|
|
422
423
|
val label = googlePayParams.getString("label")
|
|
423
424
|
|
|
@@ -722,7 +723,10 @@ class OnrampSdkModule(
|
|
|
722
723
|
result.displayData.sublabel?.let { displayData.putString("sublabel", it) }
|
|
723
724
|
displayData.putString("type", mapPaymentDetailsType(result.displayData.type))
|
|
724
725
|
|
|
725
|
-
|
|
726
|
+
val map = Arguments.createMap()
|
|
727
|
+
map.putMap("displayData", displayData)
|
|
728
|
+
result.kycInfo?.let { map.putMap("kycInfo", mapFromKycInfo(it)) }
|
|
729
|
+
promise.resolve(map)
|
|
726
730
|
}
|
|
727
731
|
}
|
|
728
732
|
|
package/android/src/test/java/com/reactnativestripesdk/PaymentMethodMessagingElementConfigTest.kt
CHANGED
|
@@ -404,7 +404,7 @@ class PaymentMethodMessagingElementConfigTest {
|
|
|
404
404
|
readableMapOf(
|
|
405
405
|
"font" to
|
|
406
406
|
readableMapOf(
|
|
407
|
-
"
|
|
407
|
+
"size" to 20,
|
|
408
408
|
),
|
|
409
409
|
)
|
|
410
410
|
|
|
@@ -416,7 +416,7 @@ class PaymentMethodMessagingElementConfigTest {
|
|
|
416
416
|
PaymentMethodMessagingElement.Appearance
|
|
417
417
|
.Font()
|
|
418
418
|
.fontFamily(null)
|
|
419
|
-
.fontSizeSp((
|
|
419
|
+
.fontSizeSp((20).toFloat())
|
|
420
420
|
font(font)
|
|
421
421
|
colors(PaymentMethodMessagingElement.Appearance.Colors())
|
|
422
422
|
}
|
|
@@ -433,7 +433,7 @@ class PaymentMethodMessagingElementConfigTest {
|
|
|
433
433
|
"linkTextColor" to "#00FFFF",
|
|
434
434
|
"font" to
|
|
435
435
|
readableMapOf(
|
|
436
|
-
"
|
|
436
|
+
"size" to 20,
|
|
437
437
|
),
|
|
438
438
|
)
|
|
439
439
|
|
|
@@ -2,14 +2,20 @@ package com.reactnativestripesdk.mappers
|
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import com.facebook.react.bridge.WritableMap
|
|
5
|
+
import com.reactnativestripesdk.utils.buildCheckoutAddressUpdate
|
|
5
6
|
import com.reactnativestripesdk.utils.createCanAddCardResult
|
|
7
|
+
import com.reactnativestripesdk.utils.mapNextAction
|
|
8
|
+
import com.reactnativestripesdk.utils.mapPaymentMethodType
|
|
6
9
|
import com.reactnativestripesdk.utils.mapToAddress
|
|
7
10
|
import com.reactnativestripesdk.utils.mapToBillingDetails
|
|
11
|
+
import com.reactnativestripesdk.utils.mapToPaymentMethodType
|
|
8
12
|
import com.reactnativestripesdk.utils.mapToPreferredNetworks
|
|
9
13
|
import com.reactnativestripesdk.utils.parseCustomPaymentMethods
|
|
10
14
|
import com.reactnativestripesdk.utils.readableArrayOf
|
|
11
15
|
import com.reactnativestripesdk.utils.readableMapOf
|
|
12
16
|
import com.stripe.android.model.CardBrand
|
|
17
|
+
import com.stripe.android.model.PaymentMethod
|
|
18
|
+
import com.stripe.android.model.StripeIntent
|
|
13
19
|
import org.junit.Assert
|
|
14
20
|
import org.junit.Assert.assertEquals
|
|
15
21
|
import org.junit.Assert.assertFalse
|
|
@@ -80,6 +86,34 @@ class MappersTest {
|
|
|
80
86
|
Assert.assertNull(details?.getMap("token"))
|
|
81
87
|
}
|
|
82
88
|
|
|
89
|
+
@Test
|
|
90
|
+
fun mapPaymentMethodType_Multibanco_ReturnsString() {
|
|
91
|
+
assertEquals("Multibanco", mapPaymentMethodType(PaymentMethod.Type.Multibanco))
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@Test
|
|
95
|
+
fun mapToPaymentMethodType_Multibanco_ReturnsType() {
|
|
96
|
+
assertEquals(PaymentMethod.Type.Multibanco, mapToPaymentMethodType("Multibanco"))
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@Test
|
|
100
|
+
fun mapNextAction_DisplayMultibancoDetails_ReturnsVoucherUrl() {
|
|
101
|
+
val result =
|
|
102
|
+
mapNextAction(
|
|
103
|
+
StripeIntent.NextActionType.DisplayMultibancoDetails,
|
|
104
|
+
StripeIntent.NextActionData.DisplayMultibancoDetails(
|
|
105
|
+
hostedVoucherUrl = "https://payments.stripe.com/multibanco/voucher",
|
|
106
|
+
),
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
assertNotNull(result)
|
|
110
|
+
assertEquals("multibanco", result?.getString("type"))
|
|
111
|
+
assertEquals(
|
|
112
|
+
"https://payments.stripe.com/multibanco/voucher",
|
|
113
|
+
result?.getString("voucherURL"),
|
|
114
|
+
)
|
|
115
|
+
}
|
|
116
|
+
|
|
83
117
|
// ============================================
|
|
84
118
|
// mapToPreferredNetworks Tests
|
|
85
119
|
// ============================================
|
|
@@ -315,6 +349,65 @@ class MappersTest {
|
|
|
315
349
|
assertEquals("cpmt_valid", result[0].id)
|
|
316
350
|
}
|
|
317
351
|
|
|
352
|
+
// ============================================
|
|
353
|
+
// buildCheckoutAddressUpdate Tests
|
|
354
|
+
// ============================================
|
|
355
|
+
|
|
356
|
+
@Test
|
|
357
|
+
fun buildCheckoutAddressUpdate_TrimsFields() {
|
|
358
|
+
val update =
|
|
359
|
+
buildCheckoutAddressUpdate(
|
|
360
|
+
name = " Jane Doe ",
|
|
361
|
+
phone = " 5551234567 ",
|
|
362
|
+
address =
|
|
363
|
+
readableMapOf(
|
|
364
|
+
"country" to " US ",
|
|
365
|
+
"line1" to " 123 Main St ",
|
|
366
|
+
"line2" to " Apt 4 ",
|
|
367
|
+
"city" to " San Francisco ",
|
|
368
|
+
"state" to " CA ",
|
|
369
|
+
"postalCode" to " 94111 ",
|
|
370
|
+
),
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
assertNotNull(update)
|
|
374
|
+
assertEquals("Jane Doe", update!!.name)
|
|
375
|
+
assertEquals("5551234567", update.phone)
|
|
376
|
+
assertEquals("US", update.country)
|
|
377
|
+
assertEquals("123 Main St", update.line1)
|
|
378
|
+
assertEquals("Apt 4", update.line2)
|
|
379
|
+
assertEquals("San Francisco", update.city)
|
|
380
|
+
assertEquals("CA", update.state)
|
|
381
|
+
assertEquals("94111", update.postalCode)
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
@Test
|
|
385
|
+
fun buildCheckoutAddressUpdate_RequiresCountry() {
|
|
386
|
+
val withoutCountry =
|
|
387
|
+
buildCheckoutAddressUpdate(
|
|
388
|
+
name = "Jane Doe",
|
|
389
|
+
phone = "5551234567",
|
|
390
|
+
address =
|
|
391
|
+
readableMapOf(
|
|
392
|
+
"line1" to "123 Main St",
|
|
393
|
+
"city" to "San Francisco",
|
|
394
|
+
),
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
val blankCountry =
|
|
398
|
+
buildCheckoutAddressUpdate(
|
|
399
|
+
name = "Jane Doe",
|
|
400
|
+
phone = "5551234567",
|
|
401
|
+
address =
|
|
402
|
+
readableMapOf(
|
|
403
|
+
"country" to " ",
|
|
404
|
+
),
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
assertNull(withoutCountry)
|
|
408
|
+
assertNull(blankCountry)
|
|
409
|
+
}
|
|
410
|
+
|
|
318
411
|
// ============================================
|
|
319
412
|
// mapToAddress Tests
|
|
320
413
|
// ============================================
|