@stripe/stripe-react-native 0.64.0 → 0.64.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +2 -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 +250 -12
- package/android/src/main/java/com/reactnativestripesdk/StripeSdkPackage.kt +1 -0
- 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 +29 -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/test/java/com/reactnativestripesdk/PaymentMethodMessagingElementConfigTest.kt +3 -3
- package/android/src/test/java/com/reactnativestripesdk/mappers/MappersTest.kt +60 -0
- package/android/src/test/java/com/reactnativestripesdk/mappers/OnrampMappersTest.kt +38 -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/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 +0 -5
- package/ios/NewArch/EmbeddedPaymentElementViewComponentView.mm +16 -2
- package/ios/NewArch/StripeCurrencySelectorElementComponentView.h +10 -0
- package/ios/NewArch/StripeCurrencySelectorElementComponentView.mm +75 -0
- package/ios/PaymentMethodMessagingElementConfig.swift +6 -3
- package/ios/PaymentMethodMessagingElementView.swift +19 -0
- package/ios/StripeSdk.mm +123 -0
- 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 +3 -93
- package/jest/mock.js +14 -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/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/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/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/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/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/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/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/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/events.d.ts +11 -0
- package/lib/typescript/src/events.d.ts.map +1 -1
- 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 +1 -0
- 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/NativePaymentMethodMessagingElement.d.ts +1 -6
- package/lib/typescript/src/specs/NativePaymentMethodMessagingElement.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +16 -1
- 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/PaymentMethod.d.ts +1 -5
- 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/events.ts +11 -0
- package/src/functions.ts +30 -1
- package/src/hooks/useCheckout.tsx +207 -0
- package/src/hooks/useOnramp.tsx +9 -3
- package/src/index.tsx +4 -0
- package/src/specs/NativeCurrencySelectorElement.ts +35 -0
- package/src/specs/NativeEmbeddedPaymentElement.ts +12 -2
- package/src/specs/NativePaymentMethodMessagingElement.ts +0 -7
- package/src/specs/NativeStripeSdkModule.ts +58 -1
- package/src/types/Checkout.ts +377 -0
- package/src/types/EmbeddedPaymentElement.tsx +117 -26
- package/src/types/PaymentMethod.ts +0 -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
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
//
|
|
2
|
+
// StripeSdkImpl+Checkout.swift
|
|
3
|
+
// stripe-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Nick Porter on 4/29/26.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
@_spi(CheckoutSessionsPreview) import StripePaymentSheet
|
|
10
|
+
|
|
11
|
+
extension StripeSdkImpl {
|
|
12
|
+
internal func currentCheckoutStateResult(checkout: Checkout) -> NSDictionary {
|
|
13
|
+
Mappers.mapFromCheckoutState(checkout.state)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@objc(initCheckoutSession:configuration:resolver:rejecter:)
|
|
17
|
+
public func initCheckoutSession(
|
|
18
|
+
clientSecret: String,
|
|
19
|
+
configuration: NSDictionary,
|
|
20
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
21
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
22
|
+
) {
|
|
23
|
+
let checkoutConfiguration = buildCheckoutConfiguration(params: configuration)
|
|
24
|
+
|
|
25
|
+
Task { @MainActor [weak self] in
|
|
26
|
+
guard let self else {
|
|
27
|
+
reject(ErrorType.Failed, "Stripe SDK is unavailable", nil)
|
|
28
|
+
return
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
do {
|
|
32
|
+
let checkout = try await Checkout(
|
|
33
|
+
clientSecret: clientSecret,
|
|
34
|
+
configuration: checkoutConfiguration
|
|
35
|
+
)
|
|
36
|
+
let sessionKey = UUID().uuidString
|
|
37
|
+
|
|
38
|
+
self.checkoutInstances[sessionKey] = checkout
|
|
39
|
+
|
|
40
|
+
resolve([
|
|
41
|
+
"sessionKey": sessionKey,
|
|
42
|
+
"state": self.currentCheckoutStateResult(checkout: checkout),
|
|
43
|
+
])
|
|
44
|
+
} catch {
|
|
45
|
+
reject(self.checkoutErrorCode(for: error), error.localizedDescription, error)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@objc(checkoutUpdateShippingAddress:address:name:phone:resolver:rejecter:)
|
|
51
|
+
public func checkoutUpdateShippingAddress(
|
|
52
|
+
sessionKey: String,
|
|
53
|
+
address: NSDictionary,
|
|
54
|
+
name: String?,
|
|
55
|
+
phone: String?,
|
|
56
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
57
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
58
|
+
) {
|
|
59
|
+
performCheckoutAddressMutation(
|
|
60
|
+
sessionKey: sessionKey,
|
|
61
|
+
address: address,
|
|
62
|
+
name: name,
|
|
63
|
+
phone: phone,
|
|
64
|
+
missingCountryMessage: "A shipping address country is required.",
|
|
65
|
+
resolver: resolve,
|
|
66
|
+
rejecter: reject
|
|
67
|
+
) { checkout, addressUpdate in
|
|
68
|
+
try await checkout.updateShippingAddress(addressUpdate)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@objc(checkoutUpdateBillingAddress:address:name:phone:resolver:rejecter:)
|
|
73
|
+
public func checkoutUpdateBillingAddress(
|
|
74
|
+
sessionKey: String,
|
|
75
|
+
address: NSDictionary,
|
|
76
|
+
name: String?,
|
|
77
|
+
phone: String?,
|
|
78
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
79
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
80
|
+
) {
|
|
81
|
+
performCheckoutAddressMutation(
|
|
82
|
+
sessionKey: sessionKey,
|
|
83
|
+
address: address,
|
|
84
|
+
name: name,
|
|
85
|
+
phone: phone,
|
|
86
|
+
missingCountryMessage: "A billing address country is required.",
|
|
87
|
+
resolver: resolve,
|
|
88
|
+
rejecter: reject
|
|
89
|
+
) { checkout, addressUpdate in
|
|
90
|
+
try await checkout.updateBillingAddress(addressUpdate)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@objc(checkoutApplyPromotionCode:code:resolver:rejecter:)
|
|
95
|
+
public func checkoutApplyPromotionCode(
|
|
96
|
+
sessionKey: String,
|
|
97
|
+
code: String,
|
|
98
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
99
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
100
|
+
) {
|
|
101
|
+
performCheckoutMutation(
|
|
102
|
+
sessionKey: sessionKey,
|
|
103
|
+
resolver: resolve,
|
|
104
|
+
rejecter: reject
|
|
105
|
+
) { checkout in
|
|
106
|
+
try await checkout.applyPromotionCode(code)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@objc(checkoutRemovePromotionCode:resolver:rejecter:)
|
|
111
|
+
public func checkoutRemovePromotionCode(
|
|
112
|
+
sessionKey: String,
|
|
113
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
114
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
115
|
+
) {
|
|
116
|
+
performCheckoutMutation(
|
|
117
|
+
sessionKey: sessionKey,
|
|
118
|
+
resolver: resolve,
|
|
119
|
+
rejecter: reject
|
|
120
|
+
) { checkout in
|
|
121
|
+
try await checkout.removePromotionCode()
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@objc(checkoutUpdateLineItemQuantity:lineItemId:quantity:resolver:rejecter:)
|
|
126
|
+
public func checkoutUpdateLineItemQuantity(
|
|
127
|
+
sessionKey: String,
|
|
128
|
+
lineItemId: String,
|
|
129
|
+
quantity: Double,
|
|
130
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
131
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
132
|
+
) {
|
|
133
|
+
guard quantity.isFinite, let integerQuantity = Int(exactly: quantity) else {
|
|
134
|
+
reject(ErrorType.Failed, "Line item quantity must be an integer.", nil)
|
|
135
|
+
return
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
let lineItemUpdate = Checkout.LineItemUpdate(
|
|
139
|
+
lineItemId: lineItemId,
|
|
140
|
+
quantity: integerQuantity
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
performCheckoutMutation(
|
|
144
|
+
sessionKey: sessionKey,
|
|
145
|
+
resolver: resolve,
|
|
146
|
+
rejecter: reject
|
|
147
|
+
) { checkout in
|
|
148
|
+
try await checkout.updateQuantity(with: lineItemUpdate)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
@objc(checkoutSelectShippingOption:id:resolver:rejecter:)
|
|
153
|
+
public func checkoutSelectShippingOption(
|
|
154
|
+
sessionKey: String,
|
|
155
|
+
id: String,
|
|
156
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
157
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
158
|
+
) {
|
|
159
|
+
performCheckoutMutation(
|
|
160
|
+
sessionKey: sessionKey,
|
|
161
|
+
resolver: resolve,
|
|
162
|
+
rejecter: reject
|
|
163
|
+
) { checkout in
|
|
164
|
+
try await checkout.selectShippingOption(id)
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
@objc(checkoutUpdateTaxId:type:value:resolver:rejecter:)
|
|
169
|
+
public func checkoutUpdateTaxId(
|
|
170
|
+
sessionKey: String,
|
|
171
|
+
type: String,
|
|
172
|
+
value: String,
|
|
173
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
174
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
175
|
+
) {
|
|
176
|
+
let taxIdUpdate = Checkout.TaxIdUpdate(type: type, value: value)
|
|
177
|
+
|
|
178
|
+
performCheckoutMutation(
|
|
179
|
+
sessionKey: sessionKey,
|
|
180
|
+
resolver: resolve,
|
|
181
|
+
rejecter: reject
|
|
182
|
+
) { checkout in
|
|
183
|
+
try await checkout.updateTaxId(with: taxIdUpdate)
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
@objc(checkoutRefresh:resolver:rejecter:)
|
|
188
|
+
public func checkoutRefresh(
|
|
189
|
+
sessionKey: String,
|
|
190
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
191
|
+
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
192
|
+
) {
|
|
193
|
+
performCheckoutMutation(
|
|
194
|
+
sessionKey: sessionKey,
|
|
195
|
+
resolver: resolve,
|
|
196
|
+
rejecter: reject
|
|
197
|
+
) { checkout in
|
|
198
|
+
try await checkout.refresh()
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
internal func buildCheckoutConfiguration(params: NSDictionary) -> Checkout.Configuration {
|
|
203
|
+
var configuration = Checkout.Configuration()
|
|
204
|
+
|
|
205
|
+
if let adaptivePricing = params["adaptivePricing"] as? NSDictionary,
|
|
206
|
+
let allowed = adaptivePricing["allowed"] as? Bool {
|
|
207
|
+
configuration.adaptivePricing.allowed = allowed
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return configuration
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
private func performCheckoutMutation(
|
|
214
|
+
sessionKey: String,
|
|
215
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
216
|
+
rejecter reject: @escaping RCTPromiseRejectBlock,
|
|
217
|
+
operation: @escaping (Checkout) async throws -> Void
|
|
218
|
+
) {
|
|
219
|
+
Task { @MainActor [weak self] in
|
|
220
|
+
guard let self else {
|
|
221
|
+
reject(ErrorType.Failed, "Stripe SDK is unavailable", nil)
|
|
222
|
+
return
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
guard let checkout = self.checkoutInstances[sessionKey] else {
|
|
226
|
+
reject(ErrorType.Failed, "Checkout session not found", nil)
|
|
227
|
+
return
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
do {
|
|
231
|
+
try await operation(checkout)
|
|
232
|
+
resolve(self.currentCheckoutStateResult(checkout: checkout))
|
|
233
|
+
} catch {
|
|
234
|
+
reject(self.checkoutErrorCode(for: error), error.localizedDescription, error)
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
private func performCheckoutAddressMutation(
|
|
240
|
+
sessionKey: String,
|
|
241
|
+
address: NSDictionary,
|
|
242
|
+
name: String?,
|
|
243
|
+
phone: String?,
|
|
244
|
+
missingCountryMessage: String,
|
|
245
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
246
|
+
rejecter reject: @escaping RCTPromiseRejectBlock,
|
|
247
|
+
operation: @escaping (Checkout, Checkout.AddressUpdate) async throws -> Void
|
|
248
|
+
) {
|
|
249
|
+
guard let addressUpdate = buildCheckoutAddressUpdate(
|
|
250
|
+
address: address,
|
|
251
|
+
name: name,
|
|
252
|
+
phone: phone
|
|
253
|
+
) else {
|
|
254
|
+
reject(ErrorType.Failed, missingCountryMessage, nil)
|
|
255
|
+
return
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
performCheckoutMutation(
|
|
259
|
+
sessionKey: sessionKey,
|
|
260
|
+
resolver: resolve,
|
|
261
|
+
rejecter: reject
|
|
262
|
+
) { checkout in
|
|
263
|
+
try await operation(checkout, addressUpdate)
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
private func buildCheckoutAddressUpdate(
|
|
268
|
+
address: NSDictionary,
|
|
269
|
+
name: String?,
|
|
270
|
+
phone: String?
|
|
271
|
+
) -> Checkout.AddressUpdate? {
|
|
272
|
+
guard let country = address["country"] as? String, !country.isEmpty else {
|
|
273
|
+
return nil
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
let checkoutAddress = Checkout.Address(
|
|
277
|
+
country: country,
|
|
278
|
+
line1: address["line1"] as? String,
|
|
279
|
+
line2: address["line2"] as? String,
|
|
280
|
+
city: address["city"] as? String,
|
|
281
|
+
state: address["state"] as? String,
|
|
282
|
+
postalCode: address["postalCode"] as? String
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
return Checkout.AddressUpdate(
|
|
286
|
+
name: name,
|
|
287
|
+
phone: phone,
|
|
288
|
+
address: checkoutAddress
|
|
289
|
+
)
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
private func checkoutErrorCode(for error: Error) -> String {
|
|
293
|
+
if let checkoutError = error as? CheckoutError {
|
|
294
|
+
switch checkoutError {
|
|
295
|
+
case .invalidClientSecret:
|
|
296
|
+
return "InvalidClientSecret"
|
|
297
|
+
case .sessionNotOpen:
|
|
298
|
+
return "SessionNotOpen"
|
|
299
|
+
case .sheetCurrentlyPresented:
|
|
300
|
+
return "SheetCurrentlyPresented"
|
|
301
|
+
default:
|
|
302
|
+
return ErrorType.Failed
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return ErrorType.Failed
|
|
307
|
+
}
|
|
308
|
+
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
|
-
@_spi(EmbeddedPaymentElementPrivateBeta) @_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(CustomerSessionBetaAccess) @_spi(STP) @_spi(CustomPaymentMethodsBeta) @_spi(CardFundingFilteringPrivatePreview) import StripePaymentSheet
|
|
9
|
+
@_spi(EmbeddedPaymentElementPrivateBeta) @_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(CustomerSessionBetaAccess) @_spi(STP) @_spi(CustomPaymentMethodsBeta) @_spi(CardFundingFilteringPrivatePreview) @_spi(CheckoutSessionsPreview) import StripePaymentSheet
|
|
10
10
|
|
|
11
11
|
@objc(StripeSdkImpl)
|
|
12
12
|
extension StripeSdkImpl {
|
|
@@ -19,19 +19,22 @@ extension StripeSdkImpl {
|
|
|
19
19
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
20
20
|
reject: @escaping RCTPromiseRejectBlock) {
|
|
21
21
|
guard let modeParams = intentConfig["mode"] as? NSDictionary else {
|
|
22
|
-
|
|
22
|
+
emitLoadingFailed(message: "One of `paymentIntentClientSecret`, `setupIntentClientSecret`, or `intentConfiguration.mode` is required")
|
|
23
|
+
resolve(nil)
|
|
23
24
|
return
|
|
24
25
|
}
|
|
25
26
|
let hasConfirmHandler = intentConfig.object(forKey: "confirmHandler") != nil
|
|
26
27
|
let hasConfirmationTokenHandler = intentConfig.object(forKey: "confirmationTokenConfirmHandler") != nil
|
|
27
28
|
|
|
28
29
|
if !hasConfirmHandler && !hasConfirmationTokenHandler {
|
|
29
|
-
|
|
30
|
+
emitLoadingFailed(message: "You must provide either `intentConfiguration.confirmHandler` or `intentConfiguration.confirmationTokenConfirmHandler` if you are not passing an intent client secret")
|
|
31
|
+
resolve(nil)
|
|
30
32
|
return
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
if hasConfirmHandler && hasConfirmationTokenHandler {
|
|
34
|
-
|
|
36
|
+
emitLoadingFailed(message: "You must provide either `confirmHandler` or `confirmationTokenConfirmHandler`, but not both")
|
|
37
|
+
resolve(nil)
|
|
35
38
|
return
|
|
36
39
|
}
|
|
37
40
|
let captureMethodString = intentConfig["captureMethod"] as? String
|
|
@@ -44,7 +47,8 @@ extension StripeSdkImpl {
|
|
|
44
47
|
)
|
|
45
48
|
|
|
46
49
|
guard let configuration = buildEmbeddedPaymentElementConfiguration(params: configuration).configuration else {
|
|
47
|
-
|
|
50
|
+
emitLoadingFailed(message: "Invalid configuration")
|
|
51
|
+
resolve(nil)
|
|
48
52
|
return
|
|
49
53
|
}
|
|
50
54
|
|
|
@@ -54,26 +58,88 @@ extension StripeSdkImpl {
|
|
|
54
58
|
intentConfiguration: intentConfig,
|
|
55
59
|
configuration: configuration
|
|
56
60
|
)
|
|
57
|
-
embeddedPaymentElement
|
|
58
|
-
embeddedPaymentElement.presentingViewController = RCTPresentedViewController()
|
|
59
|
-
self.embeddedInstance = embeddedPaymentElement
|
|
60
|
-
|
|
61
|
-
// success: resolve promise
|
|
61
|
+
attachEmbedded(embeddedPaymentElement)
|
|
62
62
|
resolve(nil)
|
|
63
|
-
|
|
64
|
-
// publish initial state
|
|
65
|
-
embeddedInstanceDelegate.embeddedPaymentElementDidUpdateHeight(embeddedPaymentElement: embeddedPaymentElement)
|
|
66
|
-
embeddedInstanceDelegate.embeddedPaymentElementDidUpdatePaymentOption(embeddedPaymentElement: embeddedPaymentElement)
|
|
67
63
|
} catch {
|
|
68
|
-
|
|
64
|
+
emitLoadingFailed(error: error)
|
|
65
|
+
// Resolve so the JS hook can finish loading; loading errors are
|
|
66
|
+
// surfaced through the embeddedPaymentElementLoadingFailed event.
|
|
69
67
|
resolve(nil)
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@objc(createEmbeddedPaymentElementWithCheckout:configuration:resolve:reject:)
|
|
73
|
+
public func createEmbeddedPaymentElementWithCheckout(
|
|
74
|
+
sessionKey: String,
|
|
75
|
+
configuration: NSDictionary,
|
|
76
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
77
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
78
|
+
) {
|
|
79
|
+
guard let checkout = checkoutInstances[sessionKey] else {
|
|
80
|
+
emitLoadingFailed(message: "Checkout session not found")
|
|
81
|
+
resolve(nil)
|
|
82
|
+
return
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
guard let configuration = buildEmbeddedPaymentElementConfiguration(params: configuration).configuration else {
|
|
86
|
+
emitLoadingFailed(message: "Invalid configuration")
|
|
87
|
+
resolve(nil)
|
|
88
|
+
return
|
|
89
|
+
}
|
|
70
90
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
91
|
+
Task {
|
|
92
|
+
do {
|
|
93
|
+
let embeddedPaymentElement = try await EmbeddedPaymentElement.create(
|
|
94
|
+
checkout: checkout,
|
|
95
|
+
configuration: configuration
|
|
96
|
+
)
|
|
97
|
+
attachEmbedded(embeddedPaymentElement)
|
|
98
|
+
resolve(nil)
|
|
99
|
+
} catch {
|
|
100
|
+
emitLoadingFailed(error: error)
|
|
101
|
+
resolve(nil)
|
|
74
102
|
}
|
|
75
103
|
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/// Wires up a freshly created element and emits its initial height /
|
|
107
|
+
/// payment-option state to JS.
|
|
108
|
+
@nonobjc
|
|
109
|
+
private func attachEmbedded(_ element: EmbeddedPaymentElement) {
|
|
110
|
+
element.delegate = embeddedInstanceDelegate
|
|
111
|
+
element.presentingViewController = RCTPresentedViewController()
|
|
112
|
+
self.embeddedInstance = element
|
|
76
113
|
|
|
114
|
+
embeddedInstanceDelegate.embeddedPaymentElementDidUpdateHeight(embeddedPaymentElement: element)
|
|
115
|
+
embeddedInstanceDelegate.embeddedPaymentElementDidUpdatePaymentOption(embeddedPaymentElement: element)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@nonobjc
|
|
119
|
+
private func emitLoadingFailed(message: String) {
|
|
120
|
+
self.emitter?.emitEmbeddedPaymentElementLoadingFailed(["message": message])
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@nonobjc
|
|
124
|
+
private func emitLoadingFailed(error: Error) {
|
|
125
|
+
emitLoadingFailed(message: error.localizedDescription)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@nonobjc
|
|
129
|
+
private func resolveEmbeddedUpdateResult(
|
|
130
|
+
_ updateResult: EmbeddedPaymentElement.UpdateResult,
|
|
131
|
+
resolve: @escaping RCTPromiseResolveBlock
|
|
132
|
+
) {
|
|
133
|
+
switch updateResult {
|
|
134
|
+
case .succeeded:
|
|
135
|
+
resolve(["status": "succeeded"])
|
|
136
|
+
case .canceled:
|
|
137
|
+
resolve(["status": "canceled"])
|
|
138
|
+
case .failed(let error):
|
|
139
|
+
self.emitter?.emitEmbeddedPaymentElementLoadingFailed(["message": error.localizedDescription])
|
|
140
|
+
// We don't resolve with an error b/c loading errors are handled via the embeddedPaymentElementLoadingFailed event
|
|
141
|
+
resolve(nil)
|
|
142
|
+
}
|
|
77
143
|
}
|
|
78
144
|
|
|
79
145
|
@objc(confirmEmbeddedPaymentElement:reject:)
|
|
@@ -143,16 +209,31 @@ extension StripeSdkImpl {
|
|
|
143
209
|
return
|
|
144
210
|
}
|
|
145
211
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
212
|
+
self.resolveEmbeddedUpdateResult(updateResult, resolve: resolve)
|
|
213
|
+
}
|
|
214
|
+
}
|
|
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
|
|
155
234
|
}
|
|
235
|
+
|
|
236
|
+
self.resolveEmbeddedUpdateResult(updateResult, resolve: resolve)
|
|
156
237
|
}
|
|
157
238
|
}
|
|
158
239
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
|
-
@_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(CustomerSessionBetaAccess) @_spi(EmbeddedPaymentElementPrivateBeta) @_spi(STP) @_spi(PaymentMethodOptionsSetupFutureUsagePreview) @_spi(CustomPaymentMethodsBeta) @_spi(ConfirmationTokensPublicPreview) @_spi(CardFundingFilteringPrivatePreview) import StripePaymentSheet
|
|
9
|
+
@_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(CustomerSessionBetaAccess) @_spi(EmbeddedPaymentElementPrivateBeta) @_spi(STP) @_spi(PaymentMethodOptionsSetupFutureUsagePreview) @_spi(CustomPaymentMethodsBeta) @_spi(ConfirmationTokensPublicPreview) @_spi(CardFundingFilteringPrivatePreview) @_spi(CheckoutSessionsPreview) import StripePaymentSheet
|
|
10
10
|
|
|
11
11
|
extension StripeSdkImpl {
|
|
12
12
|
internal func buildPaymentSheetConfiguration(
|
|
@@ -183,7 +183,23 @@ extension StripeSdkImpl {
|
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
if let
|
|
186
|
+
if let checkout = params["checkout"] as? NSDictionary,
|
|
187
|
+
let sessionKey = checkout["sessionKey"] as? String {
|
|
188
|
+
guard let checkout = checkoutInstances[sessionKey] else {
|
|
189
|
+
resolve(Errors.createError(ErrorType.Failed, "Checkout session not found"))
|
|
190
|
+
return
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if params["customFlow"] as? Bool == true {
|
|
194
|
+
PaymentSheet.FlowController.create(checkout: checkout,
|
|
195
|
+
configuration: configuration) { [weak self] result in
|
|
196
|
+
handlePaymentSheetFlowControllerResult(result: result, stripeSdk: self)
|
|
197
|
+
}
|
|
198
|
+
} else {
|
|
199
|
+
self.paymentSheet = PaymentSheet(checkout: checkout, configuration: configuration)
|
|
200
|
+
resolve([])
|
|
201
|
+
}
|
|
202
|
+
} else if let paymentIntentClientSecret = params["paymentIntentClientSecret"] as? String {
|
|
187
203
|
if !Errors.isPIClientSecretValid(clientSecret: paymentIntentClientSecret) {
|
|
188
204
|
resolve(Errors.createError(ErrorType.Failed, "`secret` format does not match expected client secret formatting."))
|
|
189
205
|
return
|
package/ios/StripeSdkImpl.swift
CHANGED
|
@@ -14,9 +14,10 @@ import UIKit
|
|
|
14
14
|
@_spi(EmbeddedPaymentElementPrivateBeta)
|
|
15
15
|
@_spi(CustomerSessionBetaAccess)
|
|
16
16
|
@_spi(AppearanceAPIAdditionsPreview)
|
|
17
|
+
@_spi(CheckoutSessionsPreview)
|
|
17
18
|
import StripePaymentSheet
|
|
18
19
|
#else
|
|
19
|
-
@_spi(EmbeddedPaymentElementPrivateBeta) @_spi(CustomerSessionBetaAccess) import StripePaymentSheet
|
|
20
|
+
@_spi(EmbeddedPaymentElementPrivateBeta) @_spi(CustomerSessionBetaAccess) @_spi(CheckoutSessionsPreview) import StripePaymentSheet
|
|
20
21
|
#endif
|
|
21
22
|
|
|
22
23
|
@available(iOS 13.0, *)
|
|
@@ -67,6 +68,7 @@ public class StripeSdkImpl: NSObject, UIAdaptivePresentationControllerDelegate {
|
|
|
67
68
|
|
|
68
69
|
internal var paymentSheet: PaymentSheet?
|
|
69
70
|
internal var paymentSheetFlowController: PaymentSheet.FlowController?
|
|
71
|
+
internal var checkoutInstances: [String: Checkout] = [:]
|
|
70
72
|
var paymentSheetIntentCreationCallback: ((Result<String, Error>) -> Void)?
|
|
71
73
|
var paymentSheetConfirmationTokenIntentCreationCallback: ((Result<String, Error>) -> Void)?
|
|
72
74
|
|
|
@@ -1793,98 +1795,6 @@ public class StripeSdkImpl: NSObject, UIAdaptivePresentationControllerDelegate {
|
|
|
1793
1795
|
|
|
1794
1796
|
return coordinator
|
|
1795
1797
|
}
|
|
1796
|
-
#else
|
|
1797
|
-
@objc(configureOnramp:resolver:rejecter:)
|
|
1798
|
-
public func configureOnramp(config: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1799
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1800
|
-
}
|
|
1801
|
-
|
|
1802
|
-
@objc(hasLinkAccount:resolver:rejecter:)
|
|
1803
|
-
public func hasLinkAccount(email: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1804
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1805
|
-
}
|
|
1806
|
-
|
|
1807
|
-
@objc(registerLinkUser:resolver:rejecter:)
|
|
1808
|
-
public func registerLinkUser(info: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1809
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1810
|
-
}
|
|
1811
|
-
|
|
1812
|
-
@objc(authenticateUserWithToken:resolver:rejecter:)
|
|
1813
|
-
public func authenticateUserWithToken(
|
|
1814
|
-
_ linkAuthTokenClientSecret: String,
|
|
1815
|
-
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
1816
|
-
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
1817
|
-
) {
|
|
1818
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1819
|
-
}
|
|
1820
|
-
|
|
1821
|
-
@objc(registerWalletAddress:network:resolver:rejecter:)
|
|
1822
|
-
public func registerWalletAddress(address: String, network: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1823
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1824
|
-
}
|
|
1825
|
-
|
|
1826
|
-
@objc(attachKycInfo:resolver:rejecter:)
|
|
1827
|
-
public func attachKycInfo(info: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1828
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1829
|
-
}
|
|
1830
|
-
|
|
1831
|
-
@objc(presentKycInfoVerification:resolver:rejecter:)
|
|
1832
|
-
public func presentKycInfoVerification(
|
|
1833
|
-
updatedAddressDictionary: NSDictionary?,
|
|
1834
|
-
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
1835
|
-
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
1836
|
-
) {
|
|
1837
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1838
|
-
}
|
|
1839
|
-
|
|
1840
|
-
@objc(updatePhoneNumber:resolver:rejecter:)
|
|
1841
|
-
public func updatePhoneNumber(phone: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1842
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1843
|
-
}
|
|
1844
|
-
|
|
1845
|
-
@objc(logout:rejecter:)
|
|
1846
|
-
public func logout(resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1847
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1848
|
-
}
|
|
1849
|
-
|
|
1850
|
-
@objc(verifyIdentity:rejecter:)
|
|
1851
|
-
public func verifyIdentity(resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1852
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1853
|
-
}
|
|
1854
|
-
|
|
1855
|
-
@objc(collectPaymentMethod:platformPayParams:resolver:rejecter:)
|
|
1856
|
-
public func collectPaymentMethod(paymentMethod: String, platformPayParams: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1857
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1858
|
-
}
|
|
1859
|
-
|
|
1860
|
-
@objc(createCryptoPaymentToken:rejecter:)
|
|
1861
|
-
public func createCryptoPaymentToken(resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1862
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1863
|
-
}
|
|
1864
|
-
|
|
1865
|
-
@objc(performCheckout:resolver:rejecter:)
|
|
1866
|
-
public func performCheckout(onrampSessionId: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1867
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1868
|
-
}
|
|
1869
|
-
|
|
1870
|
-
@objc(provideCheckoutClientSecret:)
|
|
1871
|
-
public func provideCheckoutClientSecret(clientSecret: String?) {
|
|
1872
|
-
// no-op when Onramp is unavailable
|
|
1873
|
-
}
|
|
1874
|
-
|
|
1875
|
-
@objc(onrampAuthorize:resolver:rejecter:)
|
|
1876
|
-
public func onrampAuthorize(linkAuthIntentId: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1877
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1878
|
-
}
|
|
1879
|
-
|
|
1880
|
-
@objc(getCryptoTokenDisplayData:resolver:rejecter:)
|
|
1881
|
-
public func getCryptoTokenDisplayData(token: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
1882
|
-
resolveWithCryptoOnrampNotAvailableError(resolve)
|
|
1883
|
-
}
|
|
1884
|
-
|
|
1885
|
-
private func resolveWithCryptoOnrampNotAvailableError(_ resolver: @escaping RCTPromiseResolveBlock) {
|
|
1886
|
-
resolver(Errors.createError(ErrorType.Failed, "StripeCryptoOnramp is not available. To enable, add the 'stripe-react-native/Onramp' subspec to your Podfile."))
|
|
1887
|
-
}
|
|
1888
1798
|
#endif
|
|
1889
1799
|
|
|
1890
1800
|
@objc(setFinancialConnectionsForceNativeFlow:resolver:rejecter:)
|
package/jest/mock.js
CHANGED
|
@@ -197,7 +197,7 @@ const mockHooks = {
|
|
|
197
197
|
confirm: jest.fn(async () => ({
|
|
198
198
|
status: 'completed',
|
|
199
199
|
})),
|
|
200
|
-
update: jest.fn(
|
|
200
|
+
update: jest.fn(() => {}),
|
|
201
201
|
clearPaymentOption: jest.fn(() => {}),
|
|
202
202
|
loadingError: null,
|
|
203
203
|
})),
|
|
@@ -374,6 +374,7 @@ module.exports = {
|
|
|
374
374
|
GooglePayButton: () => 'GooglePayButton',
|
|
375
375
|
AddToWalletButton: () => 'AddToWalletButton',
|
|
376
376
|
PlatformPayButton: () => 'PlatformPayButton',
|
|
377
|
+
PaymentMethodMessagingElement: () => 'PaymentMethodMessagingElementView',
|
|
377
378
|
useStripe: jest.fn(() => mockFunctions),
|
|
378
379
|
};
|
|
379
380
|
|
|
@@ -396,5 +397,17 @@ jest.mock('../src/specs/NativeStripeSdkModule', () => ({
|
|
|
396
397
|
},
|
|
397
398
|
})),
|
|
398
399
|
openAuthenticatedWebView: jest.fn(),
|
|
400
|
+
createEmbeddedPaymentElement: jest.fn(async () => undefined),
|
|
401
|
+
createEmbeddedPaymentElementWithCheckout: jest.fn(async () => undefined),
|
|
402
|
+
confirmEmbeddedPaymentElement: jest.fn(async () => ({
|
|
403
|
+
status: 'completed',
|
|
404
|
+
})),
|
|
405
|
+
updateEmbeddedPaymentElement: jest.fn(async () => ({
|
|
406
|
+
status: 'succeeded',
|
|
407
|
+
})),
|
|
408
|
+
updateEmbeddedPaymentElementWithCheckout: jest.fn(async () => ({
|
|
409
|
+
status: 'succeeded',
|
|
410
|
+
})),
|
|
411
|
+
clearEmbeddedPaymentOption: jest.fn(async () => undefined),
|
|
399
412
|
},
|
|
400
413
|
}));
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.AddToWalletButton=AddToWalletButton;var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireDefault(require("react"));var _NativeAddToWalletButton=_interopRequireDefault(require("../specs/NativeAddToWalletButton"));var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="/Users/
|
|
1
|
+
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.AddToWalletButton=AddToWalletButton;var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireDefault(require("react"));var _NativeAddToWalletButton=_interopRequireDefault(require("../specs/NativeAddToWalletButton"));var _jsxRuntime=require("react/jsx-runtime");var _jsxFileName="/Users/tjclawson/stripe/stripe-react-native/src/components/AddToWalletButton.tsx";var _excluded=["onComplete"];function AddToWalletButton(_ref){var onComplete=_ref.onComplete,props=(0,_objectWithoutProperties2.default)(_ref,_excluded);return(0,_jsxRuntime.jsx)(_NativeAddToWalletButton.default,Object.assign({},props,{onCompleteAction:function onCompleteAction(value){return onComplete(value.nativeEvent);}}));}
|
|
2
2
|
//# sourceMappingURL=AddToWalletButton.js.map
|