@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
package/ios/StripeSdk.mm
CHANGED
|
@@ -92,7 +92,7 @@ RCT_EXPORT_METHOD(configureOrderTracking:(nonnull NSString *)orderTypeIdentifier
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
RCT_EXPORT_METHOD(confirmPayment:(nonnull NSString *)paymentIntentClientSecret
|
|
95
|
-
params:(
|
|
95
|
+
params:(nullable NSDictionary *)params
|
|
96
96
|
options:(nonnull NSDictionary *)options
|
|
97
97
|
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
98
98
|
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
@@ -263,6 +263,111 @@ RCT_EXPORT_METHOD(handleURLCallback:(nonnull NSString *)url
|
|
|
263
263
|
[StripeSdkImpl.shared handleURLCallback:url resolver:resolve rejecter:reject];
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
+
RCT_EXPORT_METHOD(initCheckoutSession:(nonnull NSString *)clientSecret
|
|
267
|
+
configuration:(nonnull NSDictionary *)configuration
|
|
268
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
269
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
270
|
+
{
|
|
271
|
+
[StripeSdkImpl.shared initCheckoutSession:clientSecret
|
|
272
|
+
configuration:configuration
|
|
273
|
+
resolver:resolve
|
|
274
|
+
rejecter:reject];
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
RCT_EXPORT_METHOD(checkoutUpdateShippingAddress:(nonnull NSString *)sessionKey
|
|
278
|
+
address:(nonnull NSDictionary *)address
|
|
279
|
+
name:(NSString *_Nullable)name
|
|
280
|
+
phone:(NSString *_Nullable)phone
|
|
281
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
282
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
283
|
+
{
|
|
284
|
+
[StripeSdkImpl.shared checkoutUpdateShippingAddress:sessionKey
|
|
285
|
+
address:address
|
|
286
|
+
name:name
|
|
287
|
+
phone:phone
|
|
288
|
+
resolver:resolve
|
|
289
|
+
rejecter:reject];
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
RCT_EXPORT_METHOD(checkoutUpdateBillingAddress:(nonnull NSString *)sessionKey
|
|
293
|
+
address:(nonnull NSDictionary *)address
|
|
294
|
+
name:(NSString *_Nullable)name
|
|
295
|
+
phone:(NSString *_Nullable)phone
|
|
296
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
297
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
298
|
+
{
|
|
299
|
+
[StripeSdkImpl.shared checkoutUpdateBillingAddress:sessionKey
|
|
300
|
+
address:address
|
|
301
|
+
name:name
|
|
302
|
+
phone:phone
|
|
303
|
+
resolver:resolve
|
|
304
|
+
rejecter:reject];
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
RCT_EXPORT_METHOD(checkoutApplyPromotionCode:(nonnull NSString *)sessionKey
|
|
308
|
+
code:(nonnull NSString *)code
|
|
309
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
310
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
311
|
+
{
|
|
312
|
+
[StripeSdkImpl.shared checkoutApplyPromotionCode:sessionKey
|
|
313
|
+
code:code
|
|
314
|
+
resolver:resolve
|
|
315
|
+
rejecter:reject];
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
RCT_EXPORT_METHOD(checkoutRemovePromotionCode:(nonnull NSString *)sessionKey
|
|
319
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
320
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
321
|
+
{
|
|
322
|
+
[StripeSdkImpl.shared checkoutRemovePromotionCode:sessionKey
|
|
323
|
+
resolver:resolve
|
|
324
|
+
rejecter:reject];
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
RCT_EXPORT_METHOD(checkoutUpdateLineItemQuantity:(nonnull NSString *)sessionKey
|
|
328
|
+
lineItemId:(nonnull NSString *)lineItemId
|
|
329
|
+
quantity:(double)quantity
|
|
330
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
331
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
332
|
+
{
|
|
333
|
+
[StripeSdkImpl.shared checkoutUpdateLineItemQuantity:sessionKey
|
|
334
|
+
lineItemId:lineItemId
|
|
335
|
+
quantity:quantity
|
|
336
|
+
resolver:resolve
|
|
337
|
+
rejecter:reject];
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
RCT_EXPORT_METHOD(checkoutSelectShippingOption:(nonnull NSString *)sessionKey
|
|
341
|
+
id:(nonnull NSString *)identifier
|
|
342
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
343
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
344
|
+
{
|
|
345
|
+
[StripeSdkImpl.shared checkoutSelectShippingOption:sessionKey
|
|
346
|
+
id:identifier
|
|
347
|
+
resolver:resolve
|
|
348
|
+
rejecter:reject];
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
RCT_EXPORT_METHOD(checkoutUpdateTaxId:(nonnull NSString *)sessionKey
|
|
352
|
+
type:(nonnull NSString *)type
|
|
353
|
+
value:(nonnull NSString *)value
|
|
354
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
355
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
356
|
+
{
|
|
357
|
+
[StripeSdkImpl.shared checkoutUpdateTaxId:sessionKey
|
|
358
|
+
type:type
|
|
359
|
+
value:value
|
|
360
|
+
resolver:resolve
|
|
361
|
+
rejecter:reject];
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
RCT_EXPORT_METHOD(checkoutRefresh:(nonnull NSString *)sessionKey
|
|
365
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
366
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
367
|
+
{
|
|
368
|
+
[StripeSdkImpl.shared checkoutRefresh:sessionKey resolver:resolve rejecter:reject];
|
|
369
|
+
}
|
|
370
|
+
|
|
266
371
|
RCT_EXPORT_METHOD(initCustomerSheet:(nonnull NSDictionary *)params
|
|
267
372
|
customerAdapterOverrides:(nonnull NSDictionary *)customerAdapterOverrides
|
|
268
373
|
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
@@ -448,6 +553,17 @@ RCT_EXPORT_METHOD(createEmbeddedPaymentElement:(nonnull NSDictionary *)intentCon
|
|
|
448
553
|
reject:reject];
|
|
449
554
|
}
|
|
450
555
|
|
|
556
|
+
RCT_EXPORT_METHOD(createEmbeddedPaymentElementWithCheckout:(nonnull NSString *)sessionKey
|
|
557
|
+
configuration:(nonnull NSDictionary *)configuration
|
|
558
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
559
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
560
|
+
{
|
|
561
|
+
[StripeSdkImpl.shared createEmbeddedPaymentElementWithCheckout:sessionKey
|
|
562
|
+
configuration:configuration
|
|
563
|
+
resolve:resolve
|
|
564
|
+
reject:reject];
|
|
565
|
+
}
|
|
566
|
+
|
|
451
567
|
RCT_EXPORT_METHOD(confirmEmbeddedPaymentElement:(NSInteger)viewTag
|
|
452
568
|
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
453
569
|
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
@@ -462,6 +578,13 @@ RCT_EXPORT_METHOD(updateEmbeddedPaymentElement:(NSDictionary *)intentConfig
|
|
|
462
578
|
[StripeSdkImpl.shared updateEmbeddedPaymentElement:intentConfig resolve:resolve reject:reject];
|
|
463
579
|
}
|
|
464
580
|
|
|
581
|
+
RCT_EXPORT_METHOD(updateEmbeddedPaymentElementWithCheckout:(nonnull NSString *)sessionKey
|
|
582
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
583
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
584
|
+
{
|
|
585
|
+
[StripeSdkImpl.shared updateEmbeddedPaymentElementWithCheckout:sessionKey resolve:resolve reject:reject];
|
|
586
|
+
}
|
|
587
|
+
|
|
465
588
|
RCT_EXPORT_METHOD(clearEmbeddedPaymentOption:(NSInteger)viewTag
|
|
466
589
|
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
467
590
|
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
@@ -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
|