@gmisoftware/react-native-pay 0.0.4
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/NitroPay.podspec +31 -0
- package/README.md +455 -0
- package/android/CMakeLists.txt +29 -0
- package/android/build.gradle +144 -0
- package/android/fix-prefab.gradle +51 -0
- package/android/gradle.properties +8 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/com/margelo/nitro/pay/Constants.kt +49 -0
- package/android/src/main/java/com/margelo/nitro/pay/GooglePayButtonFactory.kt +95 -0
- package/android/src/main/java/com/margelo/nitro/pay/GooglePayRequestBuilder.kt +170 -0
- package/android/src/main/java/com/margelo/nitro/pay/HybridGooglePayButton.kt +146 -0
- package/android/src/main/java/com/margelo/nitro/pay/HybridPaymentHandler.kt +184 -0
- package/android/src/main/java/com/margelo/nitro/pay/NitroPayPackage.kt +26 -0
- package/android/src/main/java/com/margelo/nitro/pay/PaymentMapper.kt +89 -0
- package/app.plugin.js +1 -0
- package/ios/ApplePayButtonFactory.swift +53 -0
- package/ios/Bridge.h +8 -0
- package/ios/HybridApplePayButton.swift +60 -0
- package/ios/HybridPaymentHandler.swift +248 -0
- package/ios/PassKitTypeMapper.swift +192 -0
- package/lib/hooks/index.d.ts +7 -0
- package/lib/hooks/index.js +10 -0
- package/lib/hooks/usePaymentCheckout.d.ts +95 -0
- package/lib/hooks/usePaymentCheckout.js +183 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +29 -0
- package/lib/plugin/index.d.ts +4 -0
- package/lib/plugin/index.js +10 -0
- package/lib/plugin/type.d.ts +4 -0
- package/lib/plugin/type.js +2 -0
- package/lib/plugin/withApplePay.d.ts +4 -0
- package/lib/plugin/withApplePay.js +32 -0
- package/lib/plugin/withGooglePay.d.ts +4 -0
- package/lib/plugin/withGooglePay.js +24 -0
- package/lib/specs/ApplePayButton.nitro.d.ts +13 -0
- package/lib/specs/ApplePayButton.nitro.js +2 -0
- package/lib/specs/GooglePayButton.nitro.d.ts +14 -0
- package/lib/specs/GooglePayButton.nitro.js +2 -0
- package/lib/specs/PaymentHandler.nitro.d.ts +10 -0
- package/lib/specs/PaymentHandler.nitro.js +2 -0
- package/lib/types/Contact.d.ts +51 -0
- package/lib/types/Contact.js +6 -0
- package/lib/types/Payment.d.ts +67 -0
- package/lib/types/Payment.js +6 -0
- package/lib/types/index.d.ts +2 -0
- package/lib/types/index.js +18 -0
- package/lib/utils/index.d.ts +4 -0
- package/lib/utils/index.js +20 -0
- package/lib/utils/paymentHelpers.d.ts +144 -0
- package/lib/utils/paymentHelpers.js +190 -0
- package/nitro.json +30 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/NitroPay+autolinking.cmake +87 -0
- package/nitrogen/generated/android/NitroPay+autolinking.gradle +27 -0
- package/nitrogen/generated/android/NitroPayOnLoad.cpp +58 -0
- package/nitrogen/generated/android/NitroPayOnLoad.hpp +25 -0
- package/nitrogen/generated/android/c++/JCNContact.hpp +202 -0
- package/nitrogen/generated/android/c++/JCNContactType.hpp +59 -0
- package/nitrogen/generated/android/c++/JCNLabeledEmailAddress.hpp +62 -0
- package/nitrogen/generated/android/c++/JCNLabeledPhoneNumber.hpp +64 -0
- package/nitrogen/generated/android/c++/JCNLabeledPostalAddress.hpp +64 -0
- package/nitrogen/generated/android/c++/JCNPhoneNumber.hpp +57 -0
- package/nitrogen/generated/android/c++/JCNPostalAddress.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void.hpp +74 -0
- package/nitrogen/generated/android/c++/JGooglePayButtonTheme.hpp +59 -0
- package/nitrogen/generated/android/c++/JGooglePayButtonType.hpp +77 -0
- package/nitrogen/generated/android/c++/JGooglePayEnvironment.hpp +59 -0
- package/nitrogen/generated/android/c++/JHybridGooglePayButtonSpec.cpp +96 -0
- package/nitrogen/generated/android/c++/JHybridGooglePayButtonSpec.hpp +71 -0
- package/nitrogen/generated/android/c++/JHybridPaymentHandlerSpec.cpp +154 -0
- package/nitrogen/generated/android/c++/JHybridPaymentHandlerSpec.hpp +66 -0
- package/nitrogen/generated/android/c++/JPKSecureElementPass.hpp +96 -0
- package/nitrogen/generated/android/c++/JPassActivationState.hpp +68 -0
- package/nitrogen/generated/android/c++/JPayServiceStatus.hpp +61 -0
- package/nitrogen/generated/android/c++/JPaymentItem.hpp +67 -0
- package/nitrogen/generated/android/c++/JPaymentItemType.hpp +59 -0
- package/nitrogen/generated/android/c++/JPaymentMethod.hpp +97 -0
- package/nitrogen/generated/android/c++/JPaymentMethodType.hpp +68 -0
- package/nitrogen/generated/android/c++/JPaymentNetwork.hpp +86 -0
- package/nitrogen/generated/android/c++/JPaymentRequest.hpp +181 -0
- package/nitrogen/generated/android/c++/JPaymentResult.hpp +97 -0
- package/nitrogen/generated/android/c++/JPaymentToken.hpp +91 -0
- package/nitrogen/generated/android/c++/views/JHybridGooglePayButtonStateUpdater.cpp +68 -0
- package/nitrogen/generated/android/c++/views/JHybridGooglePayButtonStateUpdater.hpp +49 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/CNContact.kt +96 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/CNContactType.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/CNLabeledEmailAddress.kt +39 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/CNLabeledPhoneNumber.kt +39 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/CNLabeledPostalAddress.kt +39 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/CNPhoneNumber.kt +36 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/CNPostalAddress.kt +51 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/Func_void.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/GooglePayButtonTheme.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/GooglePayButtonType.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/GooglePayEnvironment.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/HybridGooglePayButtonSpec.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/HybridPaymentHandlerSpec.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/NitroPayOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PKSecureElementPass.kt +63 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PassActivationState.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PayServiceStatus.kt +39 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PaymentItem.kt +42 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PaymentItemType.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PaymentMethod.kt +48 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PaymentMethodType.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PaymentNetwork.kt +30 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PaymentRequest.kt +72 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PaymentResult.kt +45 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/PaymentToken.kt +42 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/views/HybridGooglePayButtonManager.kt +50 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/pay/views/HybridGooglePayButtonStateUpdater.kt +23 -0
- package/nitrogen/generated/ios/NitroPay+autolinking.rb +60 -0
- package/nitrogen/generated/ios/NitroPay-Swift-Cxx-Bridge.cpp +73 -0
- package/nitrogen/generated/ios/NitroPay-Swift-Cxx-Bridge.hpp +415 -0
- package/nitrogen/generated/ios/NitroPay-Swift-Cxx-Umbrella.hpp +116 -0
- package/nitrogen/generated/ios/NitroPayAutolinking.mm +41 -0
- package/nitrogen/generated/ios/NitroPayAutolinking.swift +40 -0
- package/nitrogen/generated/ios/c++/HybridApplePayButtonSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridApplePayButtonSpecSwift.hpp +92 -0
- package/nitrogen/generated/ios/c++/HybridPaymentHandlerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridPaymentHandlerSpecSwift.hpp +148 -0
- package/nitrogen/generated/ios/c++/views/HybridApplePayButtonComponent.mm +106 -0
- package/nitrogen/generated/ios/swift/ApplePayButtonStyle.swift +44 -0
- package/nitrogen/generated/ios/swift/ApplePayButtonType.swift +84 -0
- package/nitrogen/generated/ios/swift/CNContact.swift +329 -0
- package/nitrogen/generated/ios/swift/CNContactType.swift +40 -0
- package/nitrogen/generated/ios/swift/CNLabeledEmailAddress.swift +65 -0
- package/nitrogen/generated/ios/swift/CNLabeledPhoneNumber.swift +65 -0
- package/nitrogen/generated/ios/swift/CNLabeledPostalAddress.swift +65 -0
- package/nitrogen/generated/ios/swift/CNPhoneNumber.swift +35 -0
- package/nitrogen/generated/ios/swift/CNPostalAddress.swift +204 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_PaymentResult.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
- package/nitrogen/generated/ios/swift/GooglePayEnvironment.swift +40 -0
- package/nitrogen/generated/ios/swift/HybridApplePayButtonSpec.swift +51 -0
- package/nitrogen/generated/ios/swift/HybridApplePayButtonSpec_cxx.swift +175 -0
- package/nitrogen/generated/ios/swift/HybridPaymentHandlerSpec.swift +52 -0
- package/nitrogen/generated/ios/swift/HybridPaymentHandlerSpec_cxx.swift +155 -0
- package/nitrogen/generated/ios/swift/PKSecureElementPass.swift +191 -0
- package/nitrogen/generated/ios/swift/PassActivationState.swift +52 -0
- package/nitrogen/generated/ios/swift/PayServiceStatus.swift +46 -0
- package/nitrogen/generated/ios/swift/PaymentItem.swift +57 -0
- package/nitrogen/generated/ios/swift/PaymentItemType.swift +40 -0
- package/nitrogen/generated/ios/swift/PaymentMethod.swift +134 -0
- package/nitrogen/generated/ios/swift/PaymentMethodType.swift +52 -0
- package/nitrogen/generated/ios/swift/PaymentNetwork.swift +76 -0
- package/nitrogen/generated/ios/swift/PaymentRequest.swift +341 -0
- package/nitrogen/generated/ios/swift/PaymentResult.swift +118 -0
- package/nitrogen/generated/ios/swift/PaymentToken.swift +57 -0
- package/nitrogen/generated/shared/c++/ApplePayButtonStyle.hpp +80 -0
- package/nitrogen/generated/shared/c++/ApplePayButtonType.hpp +120 -0
- package/nitrogen/generated/shared/c++/CNContact.hpp +168 -0
- package/nitrogen/generated/shared/c++/CNContactType.hpp +76 -0
- package/nitrogen/generated/shared/c++/CNLabeledEmailAddress.hpp +80 -0
- package/nitrogen/generated/shared/c++/CNLabeledPhoneNumber.hpp +82 -0
- package/nitrogen/generated/shared/c++/CNLabeledPostalAddress.hpp +82 -0
- package/nitrogen/generated/shared/c++/CNPhoneNumber.hpp +75 -0
- package/nitrogen/generated/shared/c++/CNPostalAddress.hpp +96 -0
- package/nitrogen/generated/shared/c++/GooglePayButtonTheme.hpp +76 -0
- package/nitrogen/generated/shared/c++/GooglePayButtonType.hpp +100 -0
- package/nitrogen/generated/shared/c++/GooglePayEnvironment.hpp +76 -0
- package/nitrogen/generated/shared/c++/HybridApplePayButtonSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridApplePayButtonSpec.hpp +73 -0
- package/nitrogen/generated/shared/c++/HybridGooglePayButtonSpec.cpp +28 -0
- package/nitrogen/generated/shared/c++/HybridGooglePayButtonSpec.hpp +75 -0
- package/nitrogen/generated/shared/c++/HybridPaymentHandlerSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridPaymentHandlerSpec.hpp +74 -0
- package/nitrogen/generated/shared/c++/PKSecureElementPass.hpp +114 -0
- package/nitrogen/generated/shared/c++/PassActivationState.hpp +88 -0
- package/nitrogen/generated/shared/c++/PayServiceStatus.hpp +79 -0
- package/nitrogen/generated/shared/c++/PaymentItem.hpp +85 -0
- package/nitrogen/generated/shared/c++/PaymentItemType.hpp +76 -0
- package/nitrogen/generated/shared/c++/PaymentMethod.hpp +103 -0
- package/nitrogen/generated/shared/c++/PaymentMethodType.hpp +88 -0
- package/nitrogen/generated/shared/c++/PaymentNetwork.hpp +112 -0
- package/nitrogen/generated/shared/c++/PaymentRequest.hpp +130 -0
- package/nitrogen/generated/shared/c++/PaymentResult.hpp +90 -0
- package/nitrogen/generated/shared/c++/PaymentToken.hpp +85 -0
- package/nitrogen/generated/shared/c++/views/HybridApplePayButtonComponent.cpp +111 -0
- package/nitrogen/generated/shared/c++/views/HybridApplePayButtonComponent.hpp +111 -0
- package/nitrogen/generated/shared/c++/views/HybridGooglePayButtonComponent.cpp +123 -0
- package/nitrogen/generated/shared/c++/views/HybridGooglePayButtonComponent.hpp +112 -0
- package/nitrogen/generated/shared/json/ApplePayButtonConfig.json +12 -0
- package/nitrogen/generated/shared/json/GooglePayButtonConfig.json +13 -0
- package/package.json +116 -0
- package/react-native.config.js +16 -0
- package/src/hooks/index.ts +12 -0
- package/src/hooks/usePaymentCheckout.ts +281 -0
- package/src/index.ts +32 -0
- package/src/plugin/index.ts +17 -0
- package/src/plugin/type.ts +4 -0
- package/src/plugin/withApplePay.ts +44 -0
- package/src/plugin/withGooglePay.ts +41 -0
- package/src/specs/ApplePayButton.nitro.ts +37 -0
- package/src/specs/GooglePayButton.nitro.ts +34 -0
- package/src/specs/PaymentHandler.nitro.ts +13 -0
- package/src/types/Contact.ts +58 -0
- package/src/types/Payment.ts +104 -0
- package/src/types/index.ts +2 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/paymentHelpers.ts +215 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
package com.margelo.nitro.pay
|
|
2
|
+
|
|
3
|
+
import com.google.android.gms.wallet.PaymentData
|
|
4
|
+
import org.json.JSONException
|
|
5
|
+
import org.json.JSONObject
|
|
6
|
+
import java.util.UUID
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Mapper for converting between Google Pay and app payment types
|
|
10
|
+
*/
|
|
11
|
+
object PaymentMapper {
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Maps Google Pay PaymentData to PaymentResult
|
|
15
|
+
*/
|
|
16
|
+
fun mapPaymentDataToResult(paymentData: PaymentData): PaymentResult {
|
|
17
|
+
return try {
|
|
18
|
+
val paymentInfo = paymentData.toJson()
|
|
19
|
+
val paymentMethodData = JSONObject(paymentInfo).getJSONObject("paymentMethodData")
|
|
20
|
+
|
|
21
|
+
// Extract token
|
|
22
|
+
val tokenData = paymentMethodData.getJSONObject("tokenizationData")
|
|
23
|
+
val token = tokenData.getString("token")
|
|
24
|
+
|
|
25
|
+
// Extract payment method info
|
|
26
|
+
val info = paymentMethodData.getJSONObject("info")
|
|
27
|
+
val cardNetwork = info.optString("cardNetwork", "unknown")
|
|
28
|
+
val cardDetails = info.optString("cardDetails", "****")
|
|
29
|
+
|
|
30
|
+
// Create payment method
|
|
31
|
+
val paymentMethod = PaymentMethod(
|
|
32
|
+
displayName = "$cardNetwork $cardDetails",
|
|
33
|
+
network = mapCardNetwork(cardNetwork),
|
|
34
|
+
type = PaymentMethodType.UNKNOWN,
|
|
35
|
+
secureElementPass = null,
|
|
36
|
+
billingAddress = null
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
// Create payment token
|
|
40
|
+
val paymentToken = PaymentToken(
|
|
41
|
+
paymentMethod = paymentMethod,
|
|
42
|
+
transactionIdentifier = UUID.randomUUID().toString(),
|
|
43
|
+
paymentData = token
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
// Create successful result
|
|
47
|
+
PaymentResult(
|
|
48
|
+
success = true,
|
|
49
|
+
transactionId = UUID.randomUUID().toString(),
|
|
50
|
+
token = paymentToken,
|
|
51
|
+
error = null
|
|
52
|
+
)
|
|
53
|
+
} catch (e: JSONException) {
|
|
54
|
+
createErrorResult("Failed to parse payment data: ${e.message}")
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Maps card network string to PaymentNetwork enum
|
|
60
|
+
*/
|
|
61
|
+
fun mapCardNetwork(network: String): PaymentNetwork {
|
|
62
|
+
return when (network.uppercase()) {
|
|
63
|
+
"VISA" -> PaymentNetwork.VISA
|
|
64
|
+
"MASTERCARD" -> PaymentNetwork.MASTERCARD
|
|
65
|
+
"AMEX" -> PaymentNetwork.AMEX
|
|
66
|
+
"DISCOVER" -> PaymentNetwork.DISCOVER
|
|
67
|
+
"JCB" -> PaymentNetwork.JCB
|
|
68
|
+
"MAESTRO" -> PaymentNetwork.MAESTRO
|
|
69
|
+
"ELECTRON" -> PaymentNetwork.ELECTRON
|
|
70
|
+
"ELO" -> PaymentNetwork.ELO
|
|
71
|
+
"INTERAC" -> PaymentNetwork.INTERAC
|
|
72
|
+
else -> PaymentNetwork.VISA // Default fallback
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Creates an error PaymentResult
|
|
78
|
+
*/
|
|
79
|
+
fun createErrorResult(errorMessage: String): PaymentResult {
|
|
80
|
+
return PaymentResult(
|
|
81
|
+
success = false,
|
|
82
|
+
transactionId = null,
|
|
83
|
+
token = null,
|
|
84
|
+
error = errorMessage
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
package/app.plugin.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./lib/plugin/index.js')
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import UIKit
|
|
2
|
+
import PassKit
|
|
3
|
+
|
|
4
|
+
// MARK: - Button Type Mapping
|
|
5
|
+
|
|
6
|
+
enum ApplePayButtonFactory {
|
|
7
|
+
|
|
8
|
+
/// Maps ApplePayButtonType to PKPaymentButtonType
|
|
9
|
+
static func mapButtonType(_ type: ApplePayButtonType) -> PKPaymentButtonType {
|
|
10
|
+
switch type {
|
|
11
|
+
case .buy: return .buy
|
|
12
|
+
case .setup: return .setUp
|
|
13
|
+
case .book: return .book
|
|
14
|
+
case .donate: return .donate
|
|
15
|
+
case .continue: return .continue
|
|
16
|
+
case .reload: return .reload
|
|
17
|
+
case .addmoney: return .addMoney
|
|
18
|
+
case .topup: return .topUp
|
|
19
|
+
case .order: return .order
|
|
20
|
+
case .rent: return .rent
|
|
21
|
+
case .support: return .support
|
|
22
|
+
case .contribute: return .contribute
|
|
23
|
+
case .tip: return .tip
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/// Maps ApplePayButtonStyle to PKPaymentButtonStyle
|
|
28
|
+
static func mapButtonStyle(_ style: ApplePayButtonStyle) -> PKPaymentButtonStyle {
|
|
29
|
+
switch style {
|
|
30
|
+
case .white: return .white
|
|
31
|
+
case .whiteoutline: return .whiteOutline
|
|
32
|
+
case .black: return .black
|
|
33
|
+
default: return .automatic
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// Creates a configured PKPaymentButton
|
|
38
|
+
static func createButton(
|
|
39
|
+
type: ApplePayButtonType,
|
|
40
|
+
style: ApplePayButtonStyle,
|
|
41
|
+
target: Any?,
|
|
42
|
+
action: Selector
|
|
43
|
+
) -> PKPaymentButton {
|
|
44
|
+
let pkButtonType = mapButtonType(type)
|
|
45
|
+
let pkButtonStyle = mapButtonStyle(style)
|
|
46
|
+
let button = PKPaymentButton(paymentButtonType: pkButtonType, paymentButtonStyle: pkButtonStyle)
|
|
47
|
+
button.addTarget(target, action: action, for: .touchUpInside)
|
|
48
|
+
button.translatesAutoresizingMaskIntoConstraints = false
|
|
49
|
+
return button
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
package/ios/Bridge.h
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import UIKit
|
|
2
|
+
import PassKit
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Hybrid implementation of ApplePayButton view component
|
|
6
|
+
*/
|
|
7
|
+
class HybridApplePayButton: HybridApplePayButtonSpec {
|
|
8
|
+
|
|
9
|
+
// Props
|
|
10
|
+
var buttonType: ApplePayButtonType = .buy
|
|
11
|
+
var buttonStyle: ApplePayButtonStyle = .black
|
|
12
|
+
var onPress: (() -> Void)?
|
|
13
|
+
|
|
14
|
+
// View
|
|
15
|
+
var view: UIView = UIView()
|
|
16
|
+
|
|
17
|
+
// Internal state
|
|
18
|
+
private var paymentButton: PKPaymentButton?
|
|
19
|
+
|
|
20
|
+
override init() {
|
|
21
|
+
super.init()
|
|
22
|
+
setupButton()
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
func afterUpdate() {
|
|
26
|
+
setupButton()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// MARK: - Private Methods
|
|
30
|
+
|
|
31
|
+
private func setupButton() {
|
|
32
|
+
// Remove existing button if any
|
|
33
|
+
paymentButton?.removeFromSuperview()
|
|
34
|
+
|
|
35
|
+
// Create new button
|
|
36
|
+
let button = ApplePayButtonFactory.createButton(
|
|
37
|
+
type: buttonType,
|
|
38
|
+
style: buttonStyle,
|
|
39
|
+
target: self,
|
|
40
|
+
action: #selector(buttonPressed)
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
paymentButton = button
|
|
44
|
+
|
|
45
|
+
// Add to view
|
|
46
|
+
view.addSubview(button)
|
|
47
|
+
|
|
48
|
+
// Set up constraints to fill the view
|
|
49
|
+
NSLayoutConstraint.activate([
|
|
50
|
+
button.topAnchor.constraint(equalTo: view.topAnchor),
|
|
51
|
+
button.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
|
52
|
+
button.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
|
53
|
+
button.bottomAnchor.constraint(equalTo: view.bottomAnchor)
|
|
54
|
+
])
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@objc private func buttonPressed() {
|
|
58
|
+
onPress?()
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import PassKit
|
|
2
|
+
import UIKit
|
|
3
|
+
import NitroModules
|
|
4
|
+
|
|
5
|
+
// MARK: - Constants
|
|
6
|
+
|
|
7
|
+
private enum ErrorMessage {
|
|
8
|
+
static let paymentCancelled = "Payment cancelled by user"
|
|
9
|
+
static let unableToPresent = "Unable to present payment authorization"
|
|
10
|
+
static let unableToCreate = "Unable to create payment authorization"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// MARK: - Payment Request Builder
|
|
14
|
+
|
|
15
|
+
private struct PaymentRequestBuilder {
|
|
16
|
+
|
|
17
|
+
static func build(from request: PaymentRequest) -> PKPaymentRequest {
|
|
18
|
+
let paymentRequest = PKPaymentRequest()
|
|
19
|
+
|
|
20
|
+
paymentRequest.merchantIdentifier = request.merchantIdentifier
|
|
21
|
+
paymentRequest.countryCode = request.countryCode
|
|
22
|
+
paymentRequest.currencyCode = request.currencyCode
|
|
23
|
+
paymentRequest.paymentSummaryItems = buildPaymentItems(request.paymentItems)
|
|
24
|
+
paymentRequest.merchantCapabilities = buildMerchantCapabilities(request.merchantCapabilities)
|
|
25
|
+
paymentRequest.supportedNetworks = buildSupportedNetworks(request.supportedNetworks)
|
|
26
|
+
|
|
27
|
+
if let shippingType = request.shippingType {
|
|
28
|
+
paymentRequest.shippingType = convertShippingType(shippingType)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
configureContactRequirements(paymentRequest, request: request)
|
|
32
|
+
|
|
33
|
+
return paymentRequest
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private static func buildPaymentItems(_ items: [PaymentItem]) -> [PKPaymentSummaryItem] {
|
|
37
|
+
return items.map { item in
|
|
38
|
+
let pkItem = PKPaymentSummaryItem(
|
|
39
|
+
label: item.label,
|
|
40
|
+
amount: NSDecimalNumber(decimal: Decimal(item.amount))
|
|
41
|
+
)
|
|
42
|
+
pkItem.type = item.type == .final ? .final : .pending
|
|
43
|
+
return pkItem
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private static func buildMerchantCapabilities(_ capabilities: [String]) -> PKMerchantCapability {
|
|
48
|
+
var merchantCapabilities: PKMerchantCapability = []
|
|
49
|
+
for capability in capabilities {
|
|
50
|
+
switch capability {
|
|
51
|
+
case "3DS": merchantCapabilities.insert(.capability3DS)
|
|
52
|
+
case "EMV": merchantCapabilities.insert(.capabilityEMV)
|
|
53
|
+
case "Credit": merchantCapabilities.insert(.capabilityCredit)
|
|
54
|
+
case "Debit": merchantCapabilities.insert(.capabilityDebit)
|
|
55
|
+
default: break
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return merchantCapabilities
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private static func buildSupportedNetworks(_ networks: [String]) -> [PKPaymentNetwork] {
|
|
62
|
+
return networks.compactMap { PassKitTypeMapper.convertToPKPaymentNetwork($0) }
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private static func convertShippingType(_ type: String) -> PKShippingType {
|
|
66
|
+
switch type {
|
|
67
|
+
case "shipping": return .shipping
|
|
68
|
+
case "delivery": return .delivery
|
|
69
|
+
case "storePickup": return .storePickup
|
|
70
|
+
case "servicePickup": return .servicePickup
|
|
71
|
+
default: return .shipping
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private static func configureContactRequirements(_ paymentRequest: PKPaymentRequest, request: PaymentRequest) {
|
|
76
|
+
if request.billingContactRequired == true {
|
|
77
|
+
paymentRequest.requiredBillingContactFields = [.postalAddress, .name]
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if request.shippingContactRequired == true {
|
|
81
|
+
paymentRequest.requiredShippingContactFields = [.postalAddress, .name]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// MARK: - Payment Token Converter
|
|
87
|
+
|
|
88
|
+
private struct PaymentTokenConverter {
|
|
89
|
+
|
|
90
|
+
static func convert(_ pkToken: PKPaymentToken) -> PaymentToken {
|
|
91
|
+
let paymentMethod = convertPaymentMethod(pkToken.paymentMethod)
|
|
92
|
+
|
|
93
|
+
return PaymentToken.init(
|
|
94
|
+
paymentMethod: paymentMethod,
|
|
95
|
+
transactionIdentifier: pkToken.transactionIdentifier,
|
|
96
|
+
paymentData: pkToken.paymentData.base64EncodedString()
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private static func convertPaymentMethod(_ pkMethod: PKPaymentMethod) -> PaymentMethod {
|
|
101
|
+
return PaymentMethod.init(
|
|
102
|
+
displayName: pkMethod.displayName,
|
|
103
|
+
network: pkMethod.network.map { PassKitTypeMapper.convert($0) },
|
|
104
|
+
type: PassKitTypeMapper.convert(pkMethod.type),
|
|
105
|
+
secureElementPass: convertSecureElementPass(pkMethod),
|
|
106
|
+
billingAddress: convertBillingAddress(pkMethod)
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private static func convertSecureElementPass(_ pkMethod: PKPaymentMethod) -> PKSecureElementPass? {
|
|
111
|
+
if #available(iOS 13.4, *) {
|
|
112
|
+
guard let pkSecureElementPass = pkMethod.secureElementPass else { return nil }
|
|
113
|
+
return PassKitTypeMapper.convert(pkSecureElementPass)
|
|
114
|
+
}
|
|
115
|
+
return nil
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
private static func convertBillingAddress(_ pkMethod: PKPaymentMethod) -> CNContact? {
|
|
119
|
+
if #available(iOS 13.0, *) {
|
|
120
|
+
guard let billingAddress = pkMethod.billingAddress else { return nil }
|
|
121
|
+
return PassKitTypeMapper.convert(billingAddress)
|
|
122
|
+
}
|
|
123
|
+
return nil
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// MARK: - Payment Delegate
|
|
128
|
+
|
|
129
|
+
private class PaymentDelegate: NSObject, PKPaymentAuthorizationViewControllerDelegate {
|
|
130
|
+
private weak var paymentHandler: HybridPaymentHandler?
|
|
131
|
+
private var paymentAuthorized: Bool = false
|
|
132
|
+
|
|
133
|
+
init(paymentHandler: HybridPaymentHandler) {
|
|
134
|
+
self.paymentHandler = paymentHandler
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
func paymentAuthorizationViewController(
|
|
138
|
+
_ controller: PKPaymentAuthorizationViewController,
|
|
139
|
+
didAuthorizePayment payment: PKPayment,
|
|
140
|
+
handler completion: @escaping (PKPaymentAuthorizationResult) -> Void
|
|
141
|
+
) {
|
|
142
|
+
paymentAuthorized = true
|
|
143
|
+
|
|
144
|
+
// Simulate payment processing
|
|
145
|
+
let workItem = DispatchWorkItem {
|
|
146
|
+
completion(PKPaymentAuthorizationResult(status: .success, errors: nil))
|
|
147
|
+
|
|
148
|
+
let paymentToken = PaymentTokenConverter.convert(payment.token)
|
|
149
|
+
let transactionId = UUID().uuidString
|
|
150
|
+
let result = PaymentResult.init(
|
|
151
|
+
success: true,
|
|
152
|
+
transactionId: transactionId,
|
|
153
|
+
token: paymentToken,
|
|
154
|
+
error: nil
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
self.paymentHandler?.handlePaymentResult(result)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: workItem)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) {
|
|
164
|
+
controller.dismiss(animated: true) {
|
|
165
|
+
if !self.paymentAuthorized {
|
|
166
|
+
let result = PaymentResult.init(
|
|
167
|
+
success: false,
|
|
168
|
+
transactionId: nil,
|
|
169
|
+
token: nil,
|
|
170
|
+
error: ErrorMessage.paymentCancelled
|
|
171
|
+
)
|
|
172
|
+
self.paymentHandler?.handlePaymentResult(result)
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// MARK: - Hybrid Payment Handler
|
|
179
|
+
|
|
180
|
+
class HybridPaymentHandler: HybridPaymentHandlerSpec {
|
|
181
|
+
private var currentPaymentRequest: PKPaymentRequest?
|
|
182
|
+
private var paymentCompletion: ((PaymentResult) -> Void)?
|
|
183
|
+
private var delegate: PaymentDelegate?
|
|
184
|
+
|
|
185
|
+
// MARK: - Public Methods
|
|
186
|
+
|
|
187
|
+
func payServiceStatus() throws -> PayServiceStatus {
|
|
188
|
+
let canMakePayments = PKPaymentAuthorizationViewController.canMakePayments()
|
|
189
|
+
let canSetupCards = PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: [])
|
|
190
|
+
return PayServiceStatus.init(canMakePayments, canSetupCards)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
func canMakePayments(usingNetworks: [String]) throws -> Bool {
|
|
194
|
+
let networks = usingNetworks.compactMap { PassKitTypeMapper.convertToPKPaymentNetwork($0) }
|
|
195
|
+
return PKPaymentAuthorizationViewController.canMakePayments(usingNetworks: networks)
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
func startPayment(request: PaymentRequest) throws -> Promise<PaymentResult> {
|
|
199
|
+
let promise = Promise<PaymentResult>()
|
|
200
|
+
|
|
201
|
+
DispatchQueue.main.async {
|
|
202
|
+
self.performPayment(request: request) { result in
|
|
203
|
+
promise.resolve(withResult: result)
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return promise
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// MARK: - Internal Methods
|
|
211
|
+
|
|
212
|
+
func handlePaymentResult(_ result: PaymentResult) {
|
|
213
|
+
paymentCompletion?(result)
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// MARK: - Private Methods
|
|
217
|
+
|
|
218
|
+
private func performPayment(request: PaymentRequest, completion: @escaping (PaymentResult) -> Void) {
|
|
219
|
+
let paymentRequest = PaymentRequestBuilder.build(from: request)
|
|
220
|
+
|
|
221
|
+
paymentCompletion = completion
|
|
222
|
+
currentPaymentRequest = paymentRequest
|
|
223
|
+
delegate = PaymentDelegate(paymentHandler: self)
|
|
224
|
+
|
|
225
|
+
guard let paymentAuthVC = PKPaymentAuthorizationViewController(paymentRequest: paymentRequest) else {
|
|
226
|
+
completion(createErrorResult(ErrorMessage.unableToCreate))
|
|
227
|
+
return
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
paymentAuthVC.delegate = delegate
|
|
231
|
+
|
|
232
|
+
guard let rootViewController = UIApplication.shared.windows.first?.rootViewController else {
|
|
233
|
+
completion(createErrorResult(ErrorMessage.unableToPresent))
|
|
234
|
+
return
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
rootViewController.present(paymentAuthVC, animated: true)
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
private func createErrorResult(_ error: String) -> PaymentResult {
|
|
241
|
+
return PaymentResult.init(
|
|
242
|
+
success: false,
|
|
243
|
+
transactionId: nil,
|
|
244
|
+
token: nil,
|
|
245
|
+
error: error
|
|
246
|
+
)
|
|
247
|
+
}
|
|
248
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import PassKit
|
|
2
|
+
import Contacts
|
|
3
|
+
import NitroModules
|
|
4
|
+
|
|
5
|
+
// MARK: - Constants
|
|
6
|
+
|
|
7
|
+
private enum PaymentNetworkString {
|
|
8
|
+
static let visa = "visa"
|
|
9
|
+
static let mastercard = "mastercard"
|
|
10
|
+
static let amex = "amex"
|
|
11
|
+
static let discover = "discover"
|
|
12
|
+
static let jcb = "jcb"
|
|
13
|
+
static let maestro = "maestro"
|
|
14
|
+
static let electron = "electron"
|
|
15
|
+
static let elo = "elo"
|
|
16
|
+
static let idcredit = "idcredit"
|
|
17
|
+
static let interac = "interac"
|
|
18
|
+
static let privateLabel = "privateLabel"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// MARK: - Type Converter
|
|
22
|
+
|
|
23
|
+
/// Converts Apple PassKit and Contacts types to Nitro-generated types
|
|
24
|
+
enum PassKitTypeMapper {
|
|
25
|
+
|
|
26
|
+
// MARK: - Enum Conversions
|
|
27
|
+
|
|
28
|
+
static func convert(_ network: PKPaymentNetwork) -> PaymentNetwork {
|
|
29
|
+
switch network {
|
|
30
|
+
case .visa: return .visa
|
|
31
|
+
case .masterCard: return .mastercard
|
|
32
|
+
case .amex: return .amex
|
|
33
|
+
case .discover: return .discover
|
|
34
|
+
case .JCB: return .jcb
|
|
35
|
+
case .maestro: return .maestro
|
|
36
|
+
case .electron: return .electron
|
|
37
|
+
case .elo: return .elo
|
|
38
|
+
case .idCredit: return .idcredit
|
|
39
|
+
case .interac: return .interac
|
|
40
|
+
case .privateLabel: return .privatelabel
|
|
41
|
+
default: return .visa
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static func convert(_ type: PKPaymentMethodType) -> PaymentMethodType {
|
|
46
|
+
switch type {
|
|
47
|
+
case .unknown: return .unknown
|
|
48
|
+
case .debit: return .debit
|
|
49
|
+
case .credit: return .credit
|
|
50
|
+
case .prepaid: return .prepaid
|
|
51
|
+
case .store: return .store
|
|
52
|
+
default: return .unknown
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
static func convertContactType(_ type: Contacts.CNContactType) -> CNContactType {
|
|
58
|
+
switch type {
|
|
59
|
+
case .person: return .person
|
|
60
|
+
case .organization: return .organization
|
|
61
|
+
@unknown default: return .person
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// MARK: - String to Enum Conversions
|
|
66
|
+
|
|
67
|
+
static func convertToPKPaymentNetwork(_ string: String) -> PKPaymentNetwork? {
|
|
68
|
+
switch string {
|
|
69
|
+
case PaymentNetworkString.visa: return .visa
|
|
70
|
+
case PaymentNetworkString.mastercard: return .masterCard
|
|
71
|
+
case PaymentNetworkString.amex: return .amex
|
|
72
|
+
case PaymentNetworkString.discover: return .discover
|
|
73
|
+
case PaymentNetworkString.jcb: return .JCB
|
|
74
|
+
case PaymentNetworkString.maestro: return .maestro
|
|
75
|
+
case PaymentNetworkString.electron: return .electron
|
|
76
|
+
case PaymentNetworkString.elo: return .elo
|
|
77
|
+
case PaymentNetworkString.idcredit: return .idCredit
|
|
78
|
+
case PaymentNetworkString.interac: return .interac
|
|
79
|
+
case PaymentNetworkString.privateLabel: return .privateLabel
|
|
80
|
+
default: return nil
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// MARK: - Struct Conversions
|
|
85
|
+
|
|
86
|
+
@available(iOS 13.4, *)
|
|
87
|
+
static func convert(_ pkPass: PassKit.PKSecureElementPass) -> PKSecureElementPass {
|
|
88
|
+
// Convert passActivationState using type inference from the property
|
|
89
|
+
let activationState: PassActivationState
|
|
90
|
+
switch pkPass.passActivationState {
|
|
91
|
+
case .activated: activationState = .activated
|
|
92
|
+
case .requiresActivation: activationState = .requiresactivation
|
|
93
|
+
case .activating: activationState = .activating
|
|
94
|
+
case .suspended: activationState = .suspended
|
|
95
|
+
case .deactivated: activationState = .deactivated
|
|
96
|
+
@unknown default: activationState = .deactivated
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return PKSecureElementPass.init(
|
|
100
|
+
primaryAccountIdentifier: pkPass.primaryAccountIdentifier,
|
|
101
|
+
primaryAccountNumberSuffix: pkPass.primaryAccountNumberSuffix,
|
|
102
|
+
deviceAccountIdentifier: pkPass.deviceAccountIdentifier,
|
|
103
|
+
deviceAccountNumberSuffix: pkPass.deviceAccountNumberSuffix,
|
|
104
|
+
passActivationState: activationState,
|
|
105
|
+
devicePassIdentifier: pkPass.devicePassIdentifier,
|
|
106
|
+
pairedTerminalIdentifier: pkPass.pairedTerminalIdentifier,
|
|
107
|
+
passTypeIdentifier: pkPass.passTypeIdentifier,
|
|
108
|
+
serialNumber: pkPass.serialNumber,
|
|
109
|
+
organizationName: pkPass.organizationName
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@available(iOS 13.0, *)
|
|
114
|
+
static func convert(_ contact: Contacts.CNContact) -> CNContact {
|
|
115
|
+
let contactType = convertContactType(contact.contactType)
|
|
116
|
+
|
|
117
|
+
return CNContact.init(
|
|
118
|
+
identifier: contact.identifier,
|
|
119
|
+
contactType: contactType,
|
|
120
|
+
namePrefix: contact.namePrefix,
|
|
121
|
+
givenName: contact.givenName,
|
|
122
|
+
middleName: contact.middleName,
|
|
123
|
+
familyName: contact.familyName,
|
|
124
|
+
previousFamilyName: contact.previousFamilyName,
|
|
125
|
+
nameSuffix: contact.nameSuffix,
|
|
126
|
+
nickname: contact.nickname,
|
|
127
|
+
organizationName: contact.organizationName,
|
|
128
|
+
departmentName: contact.departmentName,
|
|
129
|
+
jobTitle: contact.jobTitle,
|
|
130
|
+
phoneticGivenName: contact.phoneticGivenName,
|
|
131
|
+
phoneticMiddleName: contact.phoneticMiddleName,
|
|
132
|
+
phoneticFamilyName: contact.phoneticFamilyName,
|
|
133
|
+
phoneticOrganizationName: contact.phoneticOrganizationName,
|
|
134
|
+
note: contact.note,
|
|
135
|
+
imageDataAvailable: contact.imageDataAvailable,
|
|
136
|
+
phoneNumbers: convertPhoneNumbers(contact.phoneNumbers),
|
|
137
|
+
emailAddresses: convertEmailAddresses(contact.emailAddresses),
|
|
138
|
+
postalAddresses: convertPostalAddresses(contact.postalAddresses)
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// MARK: - Private Helpers
|
|
143
|
+
|
|
144
|
+
@available(iOS 13.0, *)
|
|
145
|
+
private static func convertPhoneNumbers(_ phoneNumbers: [Contacts.CNLabeledValue<Contacts.CNPhoneNumber>]) -> [CNLabeledPhoneNumber] {
|
|
146
|
+
return phoneNumbers.map { labeledValue in
|
|
147
|
+
let contactsPhoneNumber = labeledValue.value
|
|
148
|
+
let nitroPhoneNumber = CNPhoneNumber.init(stringValue: contactsPhoneNumber.stringValue)
|
|
149
|
+
|
|
150
|
+
return CNLabeledPhoneNumber.init(
|
|
151
|
+
label: labeledValue.label,
|
|
152
|
+
value: nitroPhoneNumber
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@available(iOS 13.0, *)
|
|
158
|
+
private static func convertEmailAddresses(_ emailAddresses: [Contacts.CNLabeledValue<NSString>]) -> [CNLabeledEmailAddress] {
|
|
159
|
+
return emailAddresses.map { labeledValue in
|
|
160
|
+
// Extract the NSString value and convert to Swift String
|
|
161
|
+
let emailString = String(labeledValue.value)
|
|
162
|
+
let labelString = labeledValue.label
|
|
163
|
+
|
|
164
|
+
// Create Nitro CNLabeledEmailAddress with Swift String values
|
|
165
|
+
return CNLabeledEmailAddress.init(
|
|
166
|
+
label: labelString,
|
|
167
|
+
value: emailString
|
|
168
|
+
)
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
@available(iOS 13.0, *)
|
|
173
|
+
private static func convertPostalAddresses(_ postalAddresses: [Contacts.CNLabeledValue<Contacts.CNPostalAddress>]) -> [CNLabeledPostalAddress] {
|
|
174
|
+
return postalAddresses.map { labeledValue in
|
|
175
|
+
let contactsAddress = labeledValue.value
|
|
176
|
+
let nitroAddress = CNPostalAddress.init(
|
|
177
|
+
street: contactsAddress.street,
|
|
178
|
+
city: contactsAddress.city,
|
|
179
|
+
state: contactsAddress.state,
|
|
180
|
+
postalCode: contactsAddress.postalCode,
|
|
181
|
+
country: contactsAddress.country,
|
|
182
|
+
isoCountryCode: contactsAddress.isoCountryCode
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
return CNLabeledPostalAddress.init(
|
|
186
|
+
label: labeledValue.label,
|
|
187
|
+
value: nitroAddress
|
|
188
|
+
)
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* React hooks for payment operations
|
|
4
|
+
*
|
|
5
|
+
* @module hooks
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.usePaymentCheckout = void 0;
|
|
9
|
+
var usePaymentCheckout_1 = require("./usePaymentCheckout");
|
|
10
|
+
Object.defineProperty(exports, "usePaymentCheckout", { enumerable: true, get: function () { return usePaymentCheckout_1.usePaymentCheckout; } });
|