@stripe/stripe-react-native 0.65.1 → 0.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/detekt/detekt-baseline.xml +0 -10
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/reactnativestripesdk/CardFieldView.kt +51 -57
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementEvent.kt +26 -0
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementView.kt +129 -16
- package/android/src/main/java/com/reactnativestripesdk/CurrencySelectorElementViewManager.kt +17 -0
- package/android/src/main/java/com/reactnativestripesdk/EventEmitterCompat.kt +4 -0
- package/android/src/main/java/com/reactnativestripesdk/PaymentSheetManager.kt +8 -19
- package/android/src/main/java/com/reactnativestripesdk/StripeAbstractComposeView.kt +1 -0
- package/android/src/main/java/com/reactnativestripesdk/StripeSdkModule.kt +89 -31
- package/android/src/main/java/com/reactnativestripesdk/StripeSdkPackage.kt +1 -0
- package/android/src/main/java/com/reactnativestripesdk/customersheet/CustomerSheetManager.kt +2 -16
- package/android/src/main/java/com/reactnativestripesdk/utils/CheckoutMappers.kt +59 -33
- package/android/src/main/java/com/reactnativestripesdk/utils/DefaultActivityLifecycleCallbacks.kt +41 -0
- package/android/src/main/java/com/reactnativestripesdk/utils/Errors.kt +11 -6
- package/android/src/oldarch/java/com/reactnativestripesdk/NativeOnrampSdkModuleSpec.java +17 -3
- package/android/src/oldarch/java/com/reactnativestripesdk/NativeStripeSdkModuleSpec.java +2 -2
- package/android/src/onramp/java/com/reactnativestripesdk/OnrampErrors.kt +145 -0
- package/android/src/onramp/java/com/reactnativestripesdk/OnrampMappers.kt +125 -0
- package/android/src/onramp/java/com/reactnativestripesdk/OnrampSdkModule.kt +144 -22
- package/android/src/test/java/com/reactnativestripesdk/DrawableLoadingTest.kt +6 -2
- package/android/src/test/java/com/reactnativestripesdk/OnrampErrorsTest.kt +168 -0
- package/android/src/test/java/com/reactnativestripesdk/mappers/OnrampMappersTest.kt +107 -0
- package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutMappersTest.kt +39 -30
- package/android/src/test/java/com/reactnativestripesdk/utils/CheckoutTestFixtures.java +8 -0
- package/ios/CurrencySelectorElementManager.m +7 -0
- package/ios/CurrencySelectorElementView.swift +142 -7
- package/ios/EmbeddedPaymentElementView.swift +1 -1
- package/ios/Mappers+Checkout.swift +251 -107
- package/ios/Mappers.swift +97 -7
- package/ios/NewArch/StripeCurrencySelectorElementComponentView.mm +14 -0
- package/ios/OldArch/StripeSdkEventEmitterCompat.h +1 -0
- package/ios/OldArch/StripeSdkEventEmitterCompat.m +6 -0
- package/ios/OnrampErrors.swift +132 -0
- package/ios/PaymentOptionDisplayData+ReactNative.swift +1 -1
- package/ios/PaymentSheetAppearance.swift +1 -1
- package/ios/StripeOnrampSdk.mm +19 -0
- package/ios/StripeSdk.mm +14 -14
- package/ios/StripeSdkEmitter.swift +1 -0
- package/ios/StripeSdkImpl+Checkout.swift +66 -31
- package/ios/StripeSdkImpl+CustomerSheet.swift +1 -1
- package/ios/StripeSdkImpl+Embedded.swift +1 -1
- package/ios/StripeSdkImpl+PaymentSheet.swift +1 -1
- package/ios/StripeSdkImpl.swift +116 -24
- package/lib/commonjs/components/PaymentMethodMessagingElement.js +1 -1
- package/lib/commonjs/components/PaymentMethodMessagingElement.js.map +1 -1
- package/lib/commonjs/components/StripeProvider.js +1 -1
- package/lib/commonjs/components/StripeProvider.js.map +1 -1
- package/lib/commonjs/hooks/useCheckout.js +1 -1
- package/lib/commonjs/hooks/useCheckout.js.map +1 -1
- package/lib/commonjs/hooks/useOnramp.js +1 -1
- package/lib/commonjs/hooks/useOnramp.js.map +1 -1
- package/lib/commonjs/internal/stripeConfig.js +2 -0
- package/lib/commonjs/internal/stripeConfig.js.map +1 -0
- package/lib/commonjs/specs/NativeOnrampSdkModule.js.map +1 -1
- package/lib/commonjs/specs/NativeStripeSdkModule.js.map +1 -1
- package/lib/commonjs/types/Errors.js +1 -1
- package/lib/commonjs/types/Errors.js.map +1 -1
- package/lib/commonjs/types/Onramp.js +1 -1
- package/lib/commonjs/types/Onramp.js.map +1 -1
- package/lib/module/components/PaymentMethodMessagingElement.js +1 -1
- package/lib/module/components/PaymentMethodMessagingElement.js.map +1 -1
- package/lib/module/components/StripeProvider.js +1 -1
- package/lib/module/components/StripeProvider.js.map +1 -1
- package/lib/module/hooks/useCheckout.js +1 -1
- package/lib/module/hooks/useCheckout.js.map +1 -1
- package/lib/module/hooks/useOnramp.js +1 -1
- package/lib/module/hooks/useOnramp.js.map +1 -1
- package/lib/module/internal/stripeConfig.js +2 -0
- package/lib/module/internal/stripeConfig.js.map +1 -0
- package/lib/module/specs/NativeOnrampSdkModule.js.map +1 -1
- package/lib/module/specs/NativeStripeSdkModule.js.map +1 -1
- package/lib/module/types/Errors.js +1 -1
- package/lib/module/types/Errors.js.map +1 -1
- package/lib/module/types/Onramp.js +1 -1
- package/lib/module/types/Onramp.js.map +1 -1
- package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts +1 -1
- package/lib/typescript/src/components/PaymentMethodMessagingElement.d.ts.map +1 -1
- package/lib/typescript/src/components/StripeProvider.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useCheckout.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useOnramp.d.ts +32 -10
- package/lib/typescript/src/hooks/useOnramp.d.ts.map +1 -1
- package/lib/typescript/src/internal/stripeConfig.d.ts +3 -0
- package/lib/typescript/src/internal/stripeConfig.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts +3 -0
- package/lib/typescript/src/specs/NativeOnrampSdkModule.d.ts.map +1 -1
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts +2 -2
- package/lib/typescript/src/specs/NativeStripeSdkModule.d.ts.map +1 -1
- package/lib/typescript/src/types/Checkout.d.ts +266 -92
- package/lib/typescript/src/types/Checkout.d.ts.map +1 -1
- package/lib/typescript/src/types/Errors.d.ts +0 -5
- package/lib/typescript/src/types/Errors.d.ts.map +1 -1
- package/lib/typescript/src/types/Onramp.d.ts +168 -9
- package/lib/typescript/src/types/Onramp.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/components/PaymentMethodMessagingElement.tsx +54 -52
- package/src/components/StripeProvider.tsx +2 -0
- package/src/hooks/useCheckout.tsx +20 -13
- package/src/hooks/useOnramp.tsx +139 -12
- package/src/internal/stripeConfig.ts +9 -0
- package/src/specs/NativeOnrampSdkModule.ts +5 -0
- package/src/specs/NativeStripeSdkModule.ts +6 -5
- package/src/types/Checkout.ts +289 -93
- package/src/types/Errors.ts +0 -6
- package/src/types/Onramp.ts +192 -9
- package/stripe-react-native.podspec +3 -3
- package/ios/CurrencySelectorElementManager.swift +0 -12
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
//
|
|
2
|
+
// OnrampErrors.swift
|
|
3
|
+
// stripe-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Michael Liberatore on 5/28/26.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#if canImport(StripeCryptoOnramp)
|
|
9
|
+
import Foundation
|
|
10
|
+
@_spi(CryptoOnrampAlpha) import StripeCryptoOnramp
|
|
11
|
+
|
|
12
|
+
enum OnrampErrors {
|
|
13
|
+
|
|
14
|
+
/// Creates a React Native error envelope for a failed Crypto Onramp operation.
|
|
15
|
+
///
|
|
16
|
+
/// Typed Crypto Onramp errors include onramp-specific diagnostics in addition to the standard error fields.
|
|
17
|
+
static func createFailedError(_ error: Swift.Error) -> NSDictionary {
|
|
18
|
+
return createOnrampError(code: ErrorType.Failed, error: error)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/// Creates a React Native error envelope for calls made before Crypto Onramp has been configured.
|
|
22
|
+
static func createNotConfiguredError() -> NSDictionary {
|
|
23
|
+
return createOnrampErrorMap(
|
|
24
|
+
code: ErrorType.Failed,
|
|
25
|
+
message: "Onramp is not configured."
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private static func createOnrampError(code: String, error: Swift.Error) -> NSDictionary {
|
|
30
|
+
if let apiError = error as? StripeCryptoOnrampAPIError {
|
|
31
|
+
return createOnrampAPIErrorMap(
|
|
32
|
+
code: code,
|
|
33
|
+
onrampErrorType: onrampErrorType(for: apiError),
|
|
34
|
+
error: apiError
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if let onrampError = error as? StripeCryptoOnrampError {
|
|
39
|
+
return createOnrampErrorMap(
|
|
40
|
+
code: code,
|
|
41
|
+
message: onrampError.userMessage,
|
|
42
|
+
localizedMessage: onrampError.localizedDescription,
|
|
43
|
+
stripeErrorCode: onrampError.code,
|
|
44
|
+
additionalFields: commonOnrampFields(error: onrampError)
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return Errors.createError(code, error)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private static func createOnrampAPIErrorMap(
|
|
52
|
+
code: String,
|
|
53
|
+
onrampErrorType: String,
|
|
54
|
+
error: StripeCryptoOnrampAPIError
|
|
55
|
+
) -> NSDictionary {
|
|
56
|
+
return createOnrampErrorMap(
|
|
57
|
+
code: code,
|
|
58
|
+
message: error.userMessage,
|
|
59
|
+
localizedMessage: error.localizedDescription,
|
|
60
|
+
type: error.type,
|
|
61
|
+
stripeErrorCode: error.code,
|
|
62
|
+
additionalFields: commonOnrampFields(error: error, onrampErrorType: onrampErrorType).merging([
|
|
63
|
+
"reason": error.reason,
|
|
64
|
+
"operation": error.operation,
|
|
65
|
+
"appPackageName": error.appIdentifier,
|
|
66
|
+
"mode": error.mode,
|
|
67
|
+
"sdkVersions": mapSDKVersions(error.sdkVersions),
|
|
68
|
+
"requestId": error.requestID,
|
|
69
|
+
"apiErrorCode": error.code,
|
|
70
|
+
"apiErrorType": error.type,
|
|
71
|
+
"apiErrorMessage": error.apiMessage,
|
|
72
|
+
"apiUserMessage": error.apiUserMessage,
|
|
73
|
+
"docUrl": error.docURL?.absoluteString,
|
|
74
|
+
]) { _, new in new }
|
|
75
|
+
)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
private static func commonOnrampFields(
|
|
79
|
+
error: StripeCryptoOnrampError,
|
|
80
|
+
onrampErrorType: String? = nil
|
|
81
|
+
) -> [String: Any?] {
|
|
82
|
+
return [
|
|
83
|
+
"onrampErrorType": onrampErrorType,
|
|
84
|
+
"developerMessage": error.developerMessage,
|
|
85
|
+
"userMessage": error.userMessage,
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private static func mapSDKVersions(_ sdkVersions: [SDKVersion]) -> [[String: String]] {
|
|
90
|
+
return sdkVersions.map { sdkVersion in
|
|
91
|
+
[
|
|
92
|
+
"name": sdkVersion.name,
|
|
93
|
+
"version": sdkVersion.version,
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private static func onrampErrorType(for error: StripeCryptoOnrampAPIError) -> String {
|
|
99
|
+
switch error {
|
|
100
|
+
case is AppAttestationAPIError:
|
|
101
|
+
return "AppAttestationError"
|
|
102
|
+
default:
|
|
103
|
+
return "UncategorizedApiError"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private static func createOnrampErrorMap(
|
|
108
|
+
code: String,
|
|
109
|
+
message: String?,
|
|
110
|
+
localizedMessage: String? = nil,
|
|
111
|
+
declineCode: String? = nil,
|
|
112
|
+
type: String? = nil,
|
|
113
|
+
stripeErrorCode: String? = nil,
|
|
114
|
+
additionalFields: [String: Any?] = [:]
|
|
115
|
+
) -> NSDictionary {
|
|
116
|
+
let fields: [String: Any?] = [
|
|
117
|
+
"code": code,
|
|
118
|
+
"message": message,
|
|
119
|
+
"localizedMessage": localizedMessage ?? message,
|
|
120
|
+
"declineCode": declineCode,
|
|
121
|
+
"stripeErrorCode": stripeErrorCode,
|
|
122
|
+
"type": type,
|
|
123
|
+
].merging(additionalFields) { _, new in new }
|
|
124
|
+
|
|
125
|
+
return ["error": fields.mapValues(nullIfNil)]
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private static func nullIfNil(_ value: Any?) -> Any {
|
|
129
|
+
return value ?? NSNull()
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
#endif
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
|
-
|
|
9
|
+
import StripePaymentSheet
|
|
10
10
|
|
|
11
11
|
extension EmbeddedPaymentElement.PaymentOptionDisplayData {
|
|
12
12
|
/// Convert `PaymentOptionDisplayData` into a dictionary compatible with React Native bridge.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
//
|
|
5
5
|
// Created by Charles Cruzan on 5/11/22.
|
|
6
6
|
//
|
|
7
|
-
|
|
7
|
+
import StripePaymentSheet
|
|
8
8
|
|
|
9
9
|
internal class PaymentSheetAppearance {
|
|
10
10
|
class func buildAppearanceFromParams(userParams: NSDictionary?) throws -> PaymentSheet.Appearance {
|
package/ios/StripeOnrampSdk.mm
CHANGED
|
@@ -65,6 +65,25 @@ RCT_EXPORT_METHOD(attachKycInfo:(nonnull NSDictionary *)info
|
|
|
65
65
|
[StripeSdkImpl.shared attachKycInfo:info resolver:resolve rejecter:reject];
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
RCT_EXPORT_METHOD(retrieveMissingIdentifiers:(nonnull RCTPromiseResolveBlock)resolve
|
|
69
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
70
|
+
{
|
|
71
|
+
[StripeSdkImpl.shared retrieveMissingIdentifiers:resolve rejecter:reject];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
RCT_EXPORT_METHOD(submitIdentifiers:(nonnull NSArray *)identifiers
|
|
75
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
76
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
77
|
+
{
|
|
78
|
+
[StripeSdkImpl.shared submitIdentifiers:identifiers resolver:resolve rejecter:reject];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
RCT_EXPORT_METHOD(presentUserAttestation:(nonnull RCTPromiseResolveBlock)resolve
|
|
82
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
83
|
+
{
|
|
84
|
+
[StripeSdkImpl.shared presentUserAttestation:resolve rejecter:reject];
|
|
85
|
+
}
|
|
86
|
+
|
|
68
87
|
RCT_EXPORT_METHOD(presentKycInfoVerification:(NSDictionary *)updatedAddress
|
|
69
88
|
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
70
89
|
reject:(nonnull RCTPromiseRejectBlock)reject)
|
package/ios/StripeSdk.mm
CHANGED
|
@@ -348,24 +348,24 @@ RCT_EXPORT_METHOD(checkoutSelectShippingOption:(nonnull NSString *)sessionKey
|
|
|
348
348
|
rejecter:reject];
|
|
349
349
|
}
|
|
350
350
|
|
|
351
|
-
RCT_EXPORT_METHOD(
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
355
|
-
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
351
|
+
RCT_EXPORT_METHOD(checkoutRunServerUpdateStart:(nonnull NSString *)sessionKey
|
|
352
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
353
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
356
354
|
{
|
|
357
|
-
[StripeSdkImpl.shared
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
resolver:resolve
|
|
361
|
-
rejecter:reject];
|
|
355
|
+
[StripeSdkImpl.shared checkoutRunServerUpdateStart:sessionKey
|
|
356
|
+
resolver:resolve
|
|
357
|
+
rejecter:reject];
|
|
362
358
|
}
|
|
363
359
|
|
|
364
|
-
RCT_EXPORT_METHOD(
|
|
365
|
-
|
|
366
|
-
|
|
360
|
+
RCT_EXPORT_METHOD(checkoutRunServerUpdateComplete:(nonnull NSString *)sessionKey
|
|
361
|
+
error:(NSString *)error
|
|
362
|
+
resolve:(nonnull RCTPromiseResolveBlock)resolve
|
|
363
|
+
reject:(nonnull RCTPromiseRejectBlock)reject)
|
|
367
364
|
{
|
|
368
|
-
[StripeSdkImpl.shared
|
|
365
|
+
[StripeSdkImpl.shared checkoutRunServerUpdateComplete:sessionKey
|
|
366
|
+
error:error
|
|
367
|
+
resolver:resolve
|
|
368
|
+
rejecter:reject];
|
|
369
369
|
}
|
|
370
370
|
|
|
371
371
|
RCT_EXPORT_METHOD(initCustomerSheet:(nonnull NSDictionary *)params
|
|
@@ -22,6 +22,7 @@ import Foundation
|
|
|
22
22
|
func emitOnCustomPaymentMethodConfirmHandlerCallback(_ value: [String: Any])
|
|
23
23
|
func emitPaymentMethodMessagingElementDidUpdateHeight(_ value: [String: Any])
|
|
24
24
|
func emitPaymentMethodMessagingElementConfigureResult(_ value: [String: Any])
|
|
25
|
+
func emitCheckoutSessionDidChangeState(_ value: [String: Any])
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
@objc public protocol StripeOnrampSdkEmitter {
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
// Created by Nick Porter on 4/29/26.
|
|
6
6
|
//
|
|
7
7
|
|
|
8
|
+
import Combine
|
|
8
9
|
import Foundation
|
|
9
|
-
@_spi(
|
|
10
|
+
@_spi(ReactNativeSDK) import StripePaymentSheet
|
|
10
11
|
|
|
11
12
|
extension StripeSdkImpl {
|
|
12
13
|
internal func currentCheckoutStateResult(checkout: Checkout) -> NSDictionary {
|
|
@@ -35,7 +36,17 @@ extension StripeSdkImpl {
|
|
|
35
36
|
)
|
|
36
37
|
let sessionKey = UUID().uuidString
|
|
37
38
|
|
|
39
|
+
let cancellable = checkout.$state
|
|
40
|
+
.dropFirst()
|
|
41
|
+
.sink { [weak self] state in
|
|
42
|
+
self?.emitter?.emitCheckoutSessionDidChangeState([
|
|
43
|
+
"sessionKey": sessionKey,
|
|
44
|
+
"state": Mappers.mapFromCheckoutState(state),
|
|
45
|
+
])
|
|
46
|
+
}
|
|
47
|
+
|
|
38
48
|
self.checkoutInstances[sessionKey] = checkout
|
|
49
|
+
self.checkoutStateCancellables[sessionKey] = cancellable
|
|
39
50
|
|
|
40
51
|
resolve([
|
|
41
52
|
"sessionKey": sessionKey,
|
|
@@ -65,7 +76,11 @@ extension StripeSdkImpl {
|
|
|
65
76
|
resolver: resolve,
|
|
66
77
|
rejecter: reject
|
|
67
78
|
) { checkout, addressUpdate in
|
|
68
|
-
try await checkout.updateShippingAddress(
|
|
79
|
+
try await checkout.updateShippingAddress(
|
|
80
|
+
name: addressUpdate.name,
|
|
81
|
+
phone: addressUpdate.phone,
|
|
82
|
+
address: addressUpdate.address
|
|
83
|
+
)
|
|
69
84
|
}
|
|
70
85
|
}
|
|
71
86
|
|
|
@@ -87,7 +102,11 @@ extension StripeSdkImpl {
|
|
|
87
102
|
resolver: resolve,
|
|
88
103
|
rejecter: reject
|
|
89
104
|
) { checkout, addressUpdate in
|
|
90
|
-
try await checkout.updateBillingAddress(
|
|
105
|
+
try await checkout.updateBillingAddress(
|
|
106
|
+
name: addressUpdate.name,
|
|
107
|
+
phone: addressUpdate.phone,
|
|
108
|
+
address: addressUpdate.address
|
|
109
|
+
)
|
|
91
110
|
}
|
|
92
111
|
}
|
|
93
112
|
|
|
@@ -135,17 +154,12 @@ extension StripeSdkImpl {
|
|
|
135
154
|
return
|
|
136
155
|
}
|
|
137
156
|
|
|
138
|
-
let lineItemUpdate = Checkout.LineItemUpdate(
|
|
139
|
-
lineItemId: lineItemId,
|
|
140
|
-
quantity: integerQuantity
|
|
141
|
-
)
|
|
142
|
-
|
|
143
157
|
performCheckoutMutation(
|
|
144
158
|
sessionKey: sessionKey,
|
|
145
159
|
resolver: resolve,
|
|
146
160
|
rejecter: reject
|
|
147
161
|
) { checkout in
|
|
148
|
-
try await checkout.updateQuantity(
|
|
162
|
+
try await checkout.updateQuantity(lineItemId: lineItemId, quantity: integerQuantity)
|
|
149
163
|
}
|
|
150
164
|
}
|
|
151
165
|
|
|
@@ -165,38 +179,59 @@ extension StripeSdkImpl {
|
|
|
165
179
|
}
|
|
166
180
|
}
|
|
167
181
|
|
|
168
|
-
@objc(
|
|
169
|
-
public func
|
|
182
|
+
@objc(checkoutRunServerUpdateStart:resolver:rejecter:)
|
|
183
|
+
public func checkoutRunServerUpdateStart(
|
|
170
184
|
sessionKey: String,
|
|
171
|
-
type: String,
|
|
172
|
-
value: String,
|
|
173
185
|
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
174
186
|
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
175
187
|
) {
|
|
176
|
-
|
|
188
|
+
Task { @MainActor [weak self] in
|
|
189
|
+
guard let self else {
|
|
190
|
+
reject(ErrorType.Failed, "Stripe SDK is unavailable", nil)
|
|
191
|
+
return
|
|
192
|
+
}
|
|
177
193
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
194
|
+
guard let checkout = self.checkoutInstances[sessionKey] else {
|
|
195
|
+
reject(ErrorType.Failed, "Checkout session not found", nil)
|
|
196
|
+
return
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
guard self.serverUpdateContinuations[sessionKey] == nil else {
|
|
200
|
+
reject(ErrorType.Failed, "A server update is already in progress for this session", nil)
|
|
201
|
+
return
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
do {
|
|
205
|
+
try await checkout.runServerUpdate {
|
|
206
|
+
try await withCheckedThrowingContinuation { continuation in
|
|
207
|
+
self.serverUpdateContinuations[sessionKey] = continuation
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
resolve(self.currentCheckoutStateResult(checkout: checkout))
|
|
211
|
+
} catch {
|
|
212
|
+
reject(self.checkoutErrorCode(for: error), error.localizedDescription, error)
|
|
213
|
+
}
|
|
184
214
|
}
|
|
185
215
|
}
|
|
186
216
|
|
|
187
|
-
@objc(
|
|
188
|
-
public func
|
|
217
|
+
@objc(checkoutRunServerUpdateComplete:error:resolver:rejecter:)
|
|
218
|
+
public func checkoutRunServerUpdateComplete(
|
|
189
219
|
sessionKey: String,
|
|
220
|
+
error: String?,
|
|
190
221
|
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
191
222
|
rejecter reject: @escaping RCTPromiseRejectBlock
|
|
192
223
|
) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
224
|
+
guard let continuation = serverUpdateContinuations.removeValue(forKey: sessionKey) else {
|
|
225
|
+
reject(ErrorType.Failed, "No pending server update for this session", nil)
|
|
226
|
+
return
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if let error {
|
|
230
|
+
continuation.resume(throwing: CheckoutError.apiError(message: error))
|
|
231
|
+
} else {
|
|
232
|
+
continuation.resume()
|
|
199
233
|
}
|
|
234
|
+
resolve(nil)
|
|
200
235
|
}
|
|
201
236
|
|
|
202
237
|
internal func buildCheckoutConfiguration(params: NSDictionary) -> Checkout.Configuration {
|
|
@@ -244,7 +279,7 @@ extension StripeSdkImpl {
|
|
|
244
279
|
missingCountryMessage: String,
|
|
245
280
|
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
246
281
|
rejecter reject: @escaping RCTPromiseRejectBlock,
|
|
247
|
-
operation: @escaping (Checkout, Checkout.
|
|
282
|
+
operation: @escaping (Checkout, Checkout.ContactAddress) async throws -> Void
|
|
248
283
|
) {
|
|
249
284
|
guard let addressUpdate = buildCheckoutAddressUpdate(
|
|
250
285
|
address: address,
|
|
@@ -268,7 +303,7 @@ extension StripeSdkImpl {
|
|
|
268
303
|
address: NSDictionary,
|
|
269
304
|
name: String?,
|
|
270
305
|
phone: String?
|
|
271
|
-
) -> Checkout.
|
|
306
|
+
) -> Checkout.ContactAddress? {
|
|
272
307
|
guard let country = address["country"] as? String, !country.isEmpty else {
|
|
273
308
|
return nil
|
|
274
309
|
}
|
|
@@ -282,7 +317,7 @@ extension StripeSdkImpl {
|
|
|
282
317
|
postalCode: address["postalCode"] as? String
|
|
283
318
|
)
|
|
284
319
|
|
|
285
|
-
return Checkout.
|
|
320
|
+
return Checkout.ContactAddress(
|
|
286
321
|
name: name,
|
|
287
322
|
phone: phone,
|
|
288
323
|
address: checkoutAddress
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
|
-
@_spi(PrivateBetaCustomerSheet) @_spi(
|
|
9
|
+
@_spi(PrivateBetaCustomerSheet) @_spi(STP) import StripePaymentSheet
|
|
10
10
|
extension StripeSdkImpl {
|
|
11
11
|
@objc(initCustomerSheet:customerAdapterOverrides:resolver:rejecter:)
|
|
12
12
|
public func initCustomerSheet(params: NSDictionary,
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
|
-
@_spi(
|
|
9
|
+
@_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(STP) @_spi(CustomPaymentMethodsBeta) @_spi(CardFundingFilteringPrivatePreview) import StripePaymentSheet
|
|
10
10
|
|
|
11
11
|
@objc(StripeSdkImpl)
|
|
12
12
|
extension StripeSdkImpl {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
9
|
-
@_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(
|
|
9
|
+
@_spi(ExperimentalAllowsRemovalOfLastSavedPaymentMethodAPI) @_spi(STP) @_spi(PaymentMethodOptionsSetupFutureUsagePreview) @_spi(CustomPaymentMethodsBeta) @_spi(ConfirmationTokensPublicPreview) @_spi(CardFundingFilteringPrivatePreview) import StripePaymentSheet
|
|
10
10
|
|
|
11
11
|
extension StripeSdkImpl {
|
|
12
12
|
internal func buildPaymentSheetConfiguration(
|