@primer-io/react-native 0.15.8 → 0.16.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/build.gradle +0 -3
- package/android/src/main/java/com/primerioreactnative/PrimerCardNumberEditTextManager.kt +83 -0
- package/android/src/main/java/com/primerioreactnative/PrimerHeadlessUniversalCheckout.kt +198 -0
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +3 -7
- package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +1 -0
- package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +14 -3
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +2 -0
- package/android/src/main/java/com/primerioreactnative/huc/assets/AssetsManager.kt +56 -0
- package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +11 -0
- package/android/src/main/java/com/primerioreactnative/huc/extensions/Map.kt +10 -0
- package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +1 -1
- package/android/src/main/java/com/primerioreactnative/utils/Keys.kt +7 -0
- package/ios/{ReactNative-Bridging-Header.h → Core/ReactNative-Bridging-Header.h} +1 -0
- package/ios/Headless Universal Checkout/RNTPrimerCardNumberInputElementManager.m +23 -0
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +30 -0
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +241 -0
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.m +14 -0
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +113 -0
- package/ios/{Pods/Manifest.lock → Podfile.lock} +1 -1
- package/lib/commonjs/PrimerInput.js +80 -0
- package/lib/commonjs/PrimerInput.js.map +1 -0
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +14 -0
- package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -0
- package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +110 -0
- package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +117 -0
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/commonjs/headless_checkout/types.js +2 -0
- package/lib/commonjs/headless_checkout/types.js.map +1 -0
- package/lib/commonjs/index.js +28 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/primer-callbacks.js +4 -0
- package/lib/commonjs/models/primer-config.js +4 -0
- package/lib/commonjs/models/primer-settings.js +4 -0
- package/lib/commonjs/models/primer.js +4 -0
- package/lib/commonjs/utils/index.js +1 -1
- package/lib/module/PrimerInput.js +46 -0
- package/lib/module/PrimerInput.js.map +1 -0
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +5 -0
- package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -0
- package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +98 -0
- package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +100 -0
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/module/headless_checkout/types.js +2 -0
- package/lib/module/headless_checkout/types.js.map +1 -0
- package/lib/module/index.js +4 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/primer-callbacks.js +1 -1
- package/lib/module/models/primer-config.js +1 -1
- package/lib/module/models/primer-settings.js +1 -1
- package/lib/module/models/primer.js +1 -1
- package/lib/typescript/PrimerInput.d.ts +15 -0
- package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts +1 -0
- package/lib/typescript/headless_checkout/NativePrimerHeadlessUniversalCheckout.d.ts +13 -0
- package/lib/typescript/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +13 -0
- package/lib/typescript/headless_checkout/types.d.ts +16 -0
- package/lib/typescript/index.d.ts +3 -1
- package/package.json +1 -1
- package/primer-io-react-native.podspec +1 -1
- package/src/PrimerInput.tsx +73 -0
- package/src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tsx +2 -0
- package/src/headless_checkout/NativePrimerHeadlessUniversalCheckout.ts +132 -0
- package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +140 -0
- package/src/headless_checkout/types.ts +18 -0
- package/src/index.tsx +3 -2
- package/ios/Pods/Pods.xcodeproj/project.pbxproj +0 -344
- package/ios/Pods/Pods.xcodeproj/xcuserdata/aladintaleb.xcuserdatad/xcschemes/Pods-ReactNative.xcscheme +0 -60
- package/ios/Pods/Pods.xcodeproj/xcuserdata/aladintaleb.xcuserdatad/xcschemes/xcschememanagement.plist +0 -16
- package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-acknowledgements.markdown +0 -3
- package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-acknowledgements.plist +0 -29
- package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-dummy.m +0 -5
- package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative.debug.xcconfig +0 -8
- package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative.release.xcconfig +0 -8
- package/ios/ReactNative.xcworkspace/xcuserdata/aladintaleb.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RNTPrimerHeadlessUniversalCheckout.swift
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 8/3/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import PrimerSDK
|
|
10
|
+
|
|
11
|
+
@objc
|
|
12
|
+
enum PrimerHeadlessUniversalCheckoutEvents: Int, CaseIterable {
|
|
13
|
+
case clientSessionDidSetUpSuccessfully = 0
|
|
14
|
+
case preparationStarted
|
|
15
|
+
case paymentMethodPresented
|
|
16
|
+
case tokenizationStarted
|
|
17
|
+
case tokenizationSucceeded
|
|
18
|
+
case resume
|
|
19
|
+
case error
|
|
20
|
+
|
|
21
|
+
var stringValue: String {
|
|
22
|
+
switch self {
|
|
23
|
+
case .clientSessionDidSetUpSuccessfully:
|
|
24
|
+
return "clientSessionDidSetUpSuccessfully"
|
|
25
|
+
case .preparationStarted:
|
|
26
|
+
return "preparationStarted"
|
|
27
|
+
case .paymentMethodPresented:
|
|
28
|
+
return "paymentMethodPresented"
|
|
29
|
+
case .tokenizationStarted:
|
|
30
|
+
return "tokenizationStarted"
|
|
31
|
+
case .tokenizationSucceeded:
|
|
32
|
+
return "tokenizationSucceeded"
|
|
33
|
+
case .resume:
|
|
34
|
+
return "resume"
|
|
35
|
+
case .error:
|
|
36
|
+
return "error"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@objc(PrimerHeadlessUniversalCheckout)
|
|
42
|
+
class RNTPrimerHeadlessUniversalCheckout: RCTEventEmitter {
|
|
43
|
+
|
|
44
|
+
private var resumeTokenCompletion: ((_ resumeToken: String) -> Void)?
|
|
45
|
+
|
|
46
|
+
override class func requiresMainQueueSetup() -> Bool {
|
|
47
|
+
return true
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
override init() {
|
|
51
|
+
super.init()
|
|
52
|
+
PrimerHeadlessUniversalCheckout.current.delegate = self
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
override func supportedEvents() -> [String]! {
|
|
56
|
+
return PrimerHeadlessUniversalCheckoutEvents.allCases.compactMap({ $0.stringValue })
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// MARK: - API
|
|
60
|
+
|
|
61
|
+
@objc
|
|
62
|
+
public func startWithClientToken(_ clientToken: String,
|
|
63
|
+
settingsStr: String?,
|
|
64
|
+
errorCallback: @escaping RCTResponseSenderBlock,
|
|
65
|
+
successCallback: @escaping RCTResponseSenderBlock)
|
|
66
|
+
{
|
|
67
|
+
var settings: PrimerSettings?
|
|
68
|
+
if let settingsStr = settingsStr {
|
|
69
|
+
do {
|
|
70
|
+
let settingsData = settingsStr.data(using: .utf8)!
|
|
71
|
+
let settingsRN = try JSONDecoder().decode(PrimerSettingsRN.self, from: settingsData)
|
|
72
|
+
settings = settingsRN.asPrimerSettings()
|
|
73
|
+
} catch {
|
|
74
|
+
errorCallback([error.rnError])
|
|
75
|
+
return
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
PrimerHeadlessUniversalCheckout.current.start(withClientToken: clientToken, settings: settings, delegate: self) { paymentMethodTypes, err in
|
|
80
|
+
if let err = err {
|
|
81
|
+
errorCallback([err.rnError])
|
|
82
|
+
} else if let paymentMethodTypes = paymentMethodTypes {
|
|
83
|
+
successCallback([paymentMethodTypes.compactMap({$0.rawValue})])
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@objc
|
|
89
|
+
public func resumeWithClientToken(_ resumeToken: String) {
|
|
90
|
+
self.resumeTokenCompletion?(resumeToken)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@objc
|
|
94
|
+
public func getAssetForPaymentMethodType(_ paymentMethodTypeStr: String,
|
|
95
|
+
assetType assetTypeStr: String,
|
|
96
|
+
errorCallback: @escaping RCTResponseSenderBlock,
|
|
97
|
+
successCallback: @escaping RCTResponseSenderBlock)
|
|
98
|
+
{
|
|
99
|
+
do {
|
|
100
|
+
try validate(assetStr: paymentMethodTypeStr, assetTypeStr: assetTypeStr)
|
|
101
|
+
let paymentMethodType = PaymentMethodConfigType(rawValue: paymentMethodTypeStr)
|
|
102
|
+
|
|
103
|
+
guard let image = PrimerHeadlessUniversalCheckout.getAsset(for: paymentMethodType, assetType: PrimerAsset.ImageType(rawValue: assetTypeStr)!) else {
|
|
104
|
+
let err = NativeError(errorId: "missing-asset", errorDescription: "Failed to find \(assetTypeStr) for \(paymentMethodTypeStr)", recoverySuggestion: nil)
|
|
105
|
+
errorCallback([err.rnError])
|
|
106
|
+
return
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
let imageURL = try self.tempStoreImage(image: image, name: paymentMethodTypeStr)
|
|
111
|
+
successCallback([imageURL.absoluteString])
|
|
112
|
+
} catch {
|
|
113
|
+
errorCallback([error.rnError])
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@objc
|
|
118
|
+
public func getAssetForCardNetwork(_ cardNetworkStr: String,
|
|
119
|
+
assetType assetTypeStr: String,
|
|
120
|
+
errorCallback: @escaping RCTResponseSenderBlock,
|
|
121
|
+
successCallback: @escaping RCTResponseSenderBlock)
|
|
122
|
+
{
|
|
123
|
+
do {
|
|
124
|
+
try validate(assetStr: cardNetworkStr, assetTypeStr: assetTypeStr)
|
|
125
|
+
guard let cardNetwork = CardNetwork(rawValue: cardNetworkStr) else {
|
|
126
|
+
let err = NativeError(errorId: "invalid-card-network", errorDescription: "Card network for \(cardNetworkStr) does not exist, make sure you don't have any typos.", recoverySuggestion: nil)
|
|
127
|
+
errorCallback([err.rnError])
|
|
128
|
+
return
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
guard let image = PrimerHeadlessUniversalCheckout.getAsset(for: cardNetwork, assetType: PrimerAsset.ImageType(rawValue: assetTypeStr)!) else {
|
|
132
|
+
let err = NativeError(errorId: "missing-asset", errorDescription: "Failed to find \(assetTypeStr) for \(cardNetworkStr)", recoverySuggestion: nil)
|
|
133
|
+
errorCallback([err.rnError])
|
|
134
|
+
return
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
let imageURL = try self.tempStoreImage(image: image, name: cardNetworkStr)
|
|
139
|
+
successCallback([imageURL.absoluteString])
|
|
140
|
+
} catch {
|
|
141
|
+
errorCallback([error.rnError])
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@objc
|
|
146
|
+
public func showPaymentMethod(_ paymentMethodTypeStr: String) {
|
|
147
|
+
let paymentMethodType = PrimerPaymentMethodType(rawValue: paymentMethodTypeStr)
|
|
148
|
+
PrimerHeadlessUniversalCheckout.current.showPaymentMethod(paymentMethodType)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// MARK: - HELPERS
|
|
152
|
+
|
|
153
|
+
private func validate(assetStr: String, assetTypeStr: String) throws {
|
|
154
|
+
var errors: [NativeError] = []
|
|
155
|
+
|
|
156
|
+
if PaymentMethodConfigType(rawValue: assetStr) != .other(rawValue: assetStr) {
|
|
157
|
+
// ...
|
|
158
|
+
} else if CardNetwork(rawValue: assetStr) != nil {
|
|
159
|
+
// ...
|
|
160
|
+
} else {
|
|
161
|
+
let err = NativeError(errorId: "invalid-payment-method-type", errorDescription: "Asset for \(assetStr) does not exist, make sure you don't have any typos.", recoverySuggestion: nil)
|
|
162
|
+
errors.append(err)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
if PrimerAsset.ImageType(rawValue: assetTypeStr) == nil {
|
|
167
|
+
let err = NativeError(errorId: "mismatch", errorDescription: "You have provided assetType=\(assetTypeStr), which is not valid", recoverySuggestion: "Use one of the following values: \(PrimerAsset.ImageType.allCases.compactMap({ $0.rawValue }))")
|
|
168
|
+
errors.append(err)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if errors.isEmpty {
|
|
172
|
+
return
|
|
173
|
+
} else if errors.count == 1 {
|
|
174
|
+
throw errors.first!
|
|
175
|
+
} else {
|
|
176
|
+
let errorDescription: String = errors.compactMap({ $0.errorDescription }).joined(separator: "/n")
|
|
177
|
+
let recoverySuggestion = errors.compactMap({ $0.recoverySuggestion }).joined(separator: "/n")
|
|
178
|
+
let err = NativeError(errorId: "underlying-errors", errorDescription: errorDescription, recoverySuggestion: recoverySuggestion)
|
|
179
|
+
throw err
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
private func tempStoreImage(image: UIImage, name: String) throws -> URL {
|
|
184
|
+
guard let imageURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("\(name).png") else {
|
|
185
|
+
let err = NativeError(errorId: "error", errorDescription: "Failed to create URL for asset", recoverySuggestion: nil)
|
|
186
|
+
throw err
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
guard let pngData = image.pngData() else {
|
|
190
|
+
let err = NativeError(errorId: "error", errorDescription: "Failed to get image's PNG data", recoverySuggestion: nil)
|
|
191
|
+
throw err
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
try pngData.write(to: imageURL)
|
|
195
|
+
return imageURL
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// MARK: - EVENTS
|
|
200
|
+
|
|
201
|
+
extension RNTPrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutDelegate {
|
|
202
|
+
func primerHeadlessUniversalCheckoutClientSessionDidSetUpSuccessfully() {
|
|
203
|
+
sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.clientSessionDidSetUpSuccessfully.stringValue, body: nil)
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
func primerHeadlessUniversalCheckoutPreparationStarted() {
|
|
207
|
+
sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.preparationStarted.stringValue, body: nil)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
func primerHeadlessUniversalCheckoutTokenizationStarted() {
|
|
211
|
+
sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.tokenizationStarted.stringValue, body: nil)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
func primerHeadlessUniversalCheckoutPaymentMethodPresented() {
|
|
215
|
+
sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.paymentMethodPresented.stringValue, body: nil)
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
func primerHeadlessUniversalCheckoutTokenizationSucceeded(paymentMethodToken: PaymentMethodToken, resumeHandler: ResumeHandlerProtocol?) {
|
|
219
|
+
do {
|
|
220
|
+
let paymentMethodTokenData = try JSONEncoder().encode(paymentMethodToken)
|
|
221
|
+
let paymentMethodTokenStr = String(data: paymentMethodTokenData, encoding: .utf8)!
|
|
222
|
+
|
|
223
|
+
self.resumeTokenCompletion = { (resumeToken) in
|
|
224
|
+
resumeHandler?.handle(newClientToken: resumeToken)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.tokenizationSucceeded.stringValue, body: ["paymentMethodToken": paymentMethodTokenStr])
|
|
228
|
+
|
|
229
|
+
} catch {
|
|
230
|
+
self.primerHeadlessUniversalCheckoutUniversalCheckoutDidFail(withError: error)
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
func primerHeadlessUniversalCheckoutResume(withResumeToken resumeToken: String, resumeHandler: ResumeHandlerProtocol?) {
|
|
235
|
+
sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.resume.stringValue, body: ["resumeToken": resumeToken])
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
func primerHeadlessUniversalCheckoutUniversalCheckoutDidFail(withError err: Error) {
|
|
239
|
+
sendEvent(withName: PrimerHeadlessUniversalCheckoutEvents.error.stringValue, body: ["error": err.rnError])
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <React/RCTViewManager.h>
|
|
3
|
+
#import <React/RCTUIManager.h>
|
|
4
|
+
#import <React/RCTView.h>
|
|
5
|
+
|
|
6
|
+
@interface RCT_EXTERN_MODULE(PrimerHeadlessUniversalCheckoutCardFormUIManager, NSObject)
|
|
7
|
+
|
|
8
|
+
RCT_EXTERN_METHOD(setInputElements:(NSString *)inputElements errorCallback: (RCTResponseSenderBlock)errorCallback successCallback: (RCTResponseSenderBlock)successCallback)
|
|
9
|
+
|
|
10
|
+
RCT_EXTERN_METHOD(tokenize)
|
|
11
|
+
|
|
12
|
+
RCT_EXTERN_METHOD(addInput:(NSNumber* __nonnull)tag)
|
|
13
|
+
|
|
14
|
+
@end
|
package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
//
|
|
2
|
+
// RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift
|
|
3
|
+
// primer-io-react-native
|
|
4
|
+
//
|
|
5
|
+
// Created by Evangelos on 4/3/22.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import PrimerSDK
|
|
10
|
+
|
|
11
|
+
@objc(PrimerHeadlessUniversalCheckoutCardFormUIManager)
|
|
12
|
+
class RNTPrimerHeadlessUniversalCheckoutCardFormUIManager: RCTViewManager {
|
|
13
|
+
|
|
14
|
+
@objc
|
|
15
|
+
override static func requiresMainQueueSetup() -> Bool {
|
|
16
|
+
return true
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
private lazy var cardFormUIManager: PrimerHeadlessUniversalCheckout.CardFormUIManager = {
|
|
20
|
+
return try! PrimerHeadlessUniversalCheckout.CardFormUIManager()
|
|
21
|
+
}()
|
|
22
|
+
private var successCallback: RCTResponseSenderBlock?
|
|
23
|
+
|
|
24
|
+
deinit {
|
|
25
|
+
print("🧨 deinit: \(self) \(Unmanaged.passUnretained(self).toOpaque())")
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
override init() {
|
|
29
|
+
super.init()
|
|
30
|
+
do {
|
|
31
|
+
self.cardFormUIManager = try PrimerHeadlessUniversalCheckout.CardFormUIManager()
|
|
32
|
+
self.cardFormUIManager.cardFormUIManagerDelegate = self
|
|
33
|
+
} catch {
|
|
34
|
+
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
print("⭐ init: \(self) \(Unmanaged.passUnretained(self).toOpaque())")
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@objc
|
|
41
|
+
override func constantsToExport() -> [AnyHashable : Any]! {
|
|
42
|
+
return ["message": "Hello from native code"]
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
func cardFormUIManager(_ cardFormUIManager: PrimerHeadlessUniversalCheckout.CardFormUIManager, isCardFormValid: Bool) {
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@objc
|
|
50
|
+
func setInputElements(_ inputElements: String, errorCallback: RCTResponseSenderBlock, successCallback: @escaping RCTResponseSenderBlock) {
|
|
51
|
+
print("RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.setInputElements\n\(inputElements)")
|
|
52
|
+
print("⭐ \(self) \(Unmanaged.passUnretained(self).toOpaque())")
|
|
53
|
+
self.successCallback = successCallback
|
|
54
|
+
self.successCallback?(["what??"])
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@objc
|
|
58
|
+
func setInputElementsWithTags(_ tags: [NSNumber]) {
|
|
59
|
+
RCTUnsafeExecuteOnMainQueueSync {
|
|
60
|
+
guard let rctUIManager = self.bridge.module(for: RCTUIManager.self) as? RCTUIManager else {
|
|
61
|
+
return
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
for tag in tags {
|
|
65
|
+
if let view = rctUIManager.view(forReactTag: tag) {
|
|
66
|
+
if let inputElement = view as? PrimerInputElement {
|
|
67
|
+
self.cardFormUIManager.inputElements = [inputElement]
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@objc
|
|
75
|
+
func addInput(_ tag: NSNumber) {
|
|
76
|
+
RCTUnsafeExecuteOnMainQueueSync {
|
|
77
|
+
guard let rctUIManager = self.bridge.module(for: RCTUIManager.self) as? RCTUIManager else {
|
|
78
|
+
return
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if let view = rctUIManager.view(forReactTag: tag) {
|
|
82
|
+
if let inputElement = view as? PrimerInputElement {
|
|
83
|
+
self.cardFormUIManager.inputElements = [inputElement]
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@objc
|
|
91
|
+
func tokenize() {
|
|
92
|
+
print("RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tokenize")
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
extension RNTPrimerHeadlessUniversalCheckoutCardFormUIManager: PrimerInputElementDelegate {
|
|
98
|
+
|
|
99
|
+
func inputElementDidFocus(_ sender: PrimerInputElement) {
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
func inputElementDidBlur(_ sender: PrimerInputElement) {
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
extension RNTPrimerHeadlessUniversalCheckoutCardFormUIManager: PrimerCardFormDelegate {
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PrimerExpiryEditTextRaw = exports.PrimerExpiryEditText = exports.PrimerCvvEditTextRaw = exports.PrimerCvvEditText = exports.PrimerCardholderNameEditTextRaw = exports.PrimerCardholderNameEditText = exports.PrimerCardNumberEditTextRaw = exports.PrimerCardNumberEditText = void 0;
|
|
7
|
+
|
|
8
|
+
var _RNTPrimerHeadlessUniversalCheckoutCardFormUIManager = require("./RNTPrimerHeadlessUniversalCheckoutCardFormUIManager");
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _reactNative = require("react-native");
|
|
13
|
+
|
|
14
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
|
+
|
|
16
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
+
|
|
18
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
19
|
+
|
|
20
|
+
// PrimerCardNumberEditText
|
|
21
|
+
const PrimerCardNumberEditTextRaw = (0, _reactNative.requireNativeComponent)('PrimerCardNumberEditText');
|
|
22
|
+
exports.PrimerCardNumberEditTextRaw = PrimerCardNumberEditTextRaw;
|
|
23
|
+
const {
|
|
24
|
+
PrimerRN
|
|
25
|
+
} = _reactNative.NativeModules;
|
|
26
|
+
|
|
27
|
+
const PrimerCardNumberEditText = props => {
|
|
28
|
+
const ref = (0, _react.useRef)( /*#__PURE__*/_react.default.createRef());
|
|
29
|
+
(0, _react.useEffect)(() => {
|
|
30
|
+
const tag = ref.current.current._nativeTag;
|
|
31
|
+
|
|
32
|
+
_RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.PrimerHeadlessUniversalCheckoutCardFormUIManager.addInput(tag);
|
|
33
|
+
|
|
34
|
+
return () => PrimerRN.removeInput(tag);
|
|
35
|
+
}, []);
|
|
36
|
+
|
|
37
|
+
const rawComponent = /*#__PURE__*/_react.default.createElement(PrimerCardNumberEditTextRaw, _extends({
|
|
38
|
+
ref: ref.current
|
|
39
|
+
}, props));
|
|
40
|
+
|
|
41
|
+
return rawComponent;
|
|
42
|
+
}; // PrimerCardholderNameEditText
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
exports.PrimerCardNumberEditText = PrimerCardNumberEditText;
|
|
46
|
+
const PrimerCardholderNameEditTextRaw = (0, _reactNative.requireNativeComponent)('PrimerCardholderNameEditText');
|
|
47
|
+
exports.PrimerCardholderNameEditTextRaw = PrimerCardholderNameEditTextRaw;
|
|
48
|
+
|
|
49
|
+
const PrimerCardholderNameEditText = props => {
|
|
50
|
+
const ref = (0, _react.useRef)( /*#__PURE__*/_react.default.createRef());
|
|
51
|
+
(0, _react.useEffect)(() => {
|
|
52
|
+
const tag = ref.current.current._nativeTag;
|
|
53
|
+
PrimerRN.addInput(tag);
|
|
54
|
+
return () => PrimerRN.removeInput(tag);
|
|
55
|
+
}, []);
|
|
56
|
+
return /*#__PURE__*/_react.default.createElement(PrimerCardholderNameEditTextRaw, _extends({
|
|
57
|
+
ref: ref.current
|
|
58
|
+
}, props));
|
|
59
|
+
}; // PrimerExpiryEditText
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
exports.PrimerCardholderNameEditText = PrimerCardholderNameEditText;
|
|
63
|
+
const PrimerExpiryEditTextRaw = (0, _reactNative.requireNativeComponent)('PrimerExpiryEditText');
|
|
64
|
+
exports.PrimerExpiryEditTextRaw = PrimerExpiryEditTextRaw;
|
|
65
|
+
|
|
66
|
+
const PrimerExpiryEditText = props => {
|
|
67
|
+
return /*#__PURE__*/_react.default.createElement(PrimerExpiryEditTextRaw, props);
|
|
68
|
+
}; // cvv
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
exports.PrimerExpiryEditText = PrimerExpiryEditText;
|
|
72
|
+
const PrimerCvvEditTextRaw = (0, _reactNative.requireNativeComponent)('PrimerCvvEditText');
|
|
73
|
+
exports.PrimerCvvEditTextRaw = PrimerCvvEditTextRaw;
|
|
74
|
+
|
|
75
|
+
const PrimerCvvEditText = props => {
|
|
76
|
+
return /*#__PURE__*/_react.default.createElement(PrimerCvvEditTextRaw, props);
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
exports.PrimerCvvEditText = PrimerCvvEditText;
|
|
80
|
+
//# sourceMappingURL=PrimerInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["PrimerInput.tsx"],"names":["PrimerCardNumberEditTextRaw","PrimerRN","NativeModules","PrimerCardNumberEditText","props","ref","React","createRef","tag","current","_nativeTag","PrimerHeadlessUniversalCheckoutCardFormUIManager","addInput","removeInput","rawComponent","PrimerCardholderNameEditTextRaw","PrimerCardholderNameEditText","PrimerExpiryEditTextRaw","PrimerExpiryEditText","PrimerCvvEditTextRaw","PrimerCvvEditText"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;AAGA;AACO,MAAMA,2BAA2B,GAAG,yCACzC,0BADyC,CAApC;;AAMP,MAAM;AAAEC,EAAAA;AAAF,IAAeC,0BAArB;;AAEO,MAAMC,wBAAiE,GAAIC,KAAD,IAAW;AAC1F,QAAMC,GAAG,GAAG,iCAAOC,eAAMC,SAAN,EAAP,CAAZ;AAEA,wBAAU,MAAM;AACd,UAAMC,GAAG,GAAGH,GAAG,CAACI,OAAJ,CAAYA,OAAZ,CAAoBC,UAAhC;;AACAC,0GAAiDC,QAAjD,CAA0DJ,GAA1D;;AACA,WAAO,MAAMP,QAAQ,CAACY,WAAT,CAAqBL,GAArB,CAAb;AACD,GAJD,EAIG,EAJH;;AAMA,QAAMM,YAAY,gBAChB,6BAAC,2BAAD;AAA6B,IAAA,GAAG,EAAET,GAAG,CAACI;AAAtC,KAAmDL,KAAnD,EADF;;AAIA,SAAOU,YAAP;AACD,CAdM,C,CAgBP;;;;AACO,MAAMC,+BAA+B,GAAG,yCAC7C,8BAD6C,CAAxC;;;AAMA,MAAMC,4BAAyE,GACpFZ,KADuF,IAEpF;AACH,QAAMC,GAAG,GAAG,iCAAOC,eAAMC,SAAN,EAAP,CAAZ;AAEA,wBAAU,MAAM;AACd,UAAMC,GAAG,GAAGH,GAAG,CAACI,OAAJ,CAAYA,OAAZ,CAAoBC,UAAhC;AACAT,IAAAA,QAAQ,CAACW,QAAT,CAAkBJ,GAAlB;AACA,WAAO,MAAMP,QAAQ,CAACY,WAAT,CAAqBL,GAArB,CAAb;AACD,GAJD,EAIG,EAJH;AAKA,sBAAO,6BAAC,+BAAD;AAAiC,IAAA,GAAG,EAAEH,GAAG,CAACI;AAA1C,KAAuDL,KAAvD,EAAP;AACD,CAXM,C,CAaP;;;;AACO,MAAMa,uBAAuB,GAAG,yCACrC,sBADqC,CAAhC;;;AAMA,MAAMC,oBAAyD,GACpEd,KADuE,IAEpE;AACH,sBAAO,6BAAC,uBAAD,EAA6BA,KAA7B,CAAP;AACD,CAJM,C,CAMP;;;;AACO,MAAMe,oBAAoB,GAAG,yCAClC,mBADkC,CAA7B;;;AAMA,MAAMC,iBAAmD,GAAIhB,KAAD,IAAW;AAC5E,sBAAO,6BAAC,oBAAD,EAA0BA,KAA1B,CAAP;AACD,CAFM","sourcesContent":["import { PrimerHeadlessUniversalCheckoutCardFormUIManager } from './RNTPrimerHeadlessUniversalCheckoutCardFormUIManager';\nimport React, { useEffect, useRef } from 'react';\nimport { NativeModules, requireNativeComponent, ViewProps } from 'react-native';\n\n\n// PrimerCardNumberEditText\nexport const PrimerCardNumberEditTextRaw = requireNativeComponent<{}>(\n 'PrimerCardNumberEditText'\n);\n\ntype PrimerCardNumberEditTextProps = ViewProps;\n\nconst { PrimerRN } = NativeModules;\n\nexport const PrimerCardNumberEditText: React.FC<PrimerCardNumberEditTextProps> = (props) => {\n const ref = useRef(React.createRef<any>());\n\n useEffect(() => {\n const tag = ref.current.current._nativeTag;\n PrimerHeadlessUniversalCheckoutCardFormUIManager.addInput(tag);\n return () => PrimerRN.removeInput(tag);\n }, []);\n\n const rawComponent = (\n <PrimerCardNumberEditTextRaw ref={ref.current} {...props} />\n );\n\n return rawComponent;\n};\n\n// PrimerCardholderNameEditText\nexport const PrimerCardholderNameEditTextRaw = requireNativeComponent<{}>(\n 'PrimerCardholderNameEditText'\n);\n\ntype PrimerCardholderNameEditTextProps = ViewProps;\n\nexport const PrimerCardholderNameEditText: React.FC<PrimerCardholderNameEditTextProps> = (\n props\n) => {\n const ref = useRef(React.createRef<any>());\n\n useEffect(() => {\n const tag = ref.current.current._nativeTag;\n PrimerRN.addInput(tag);\n return () => PrimerRN.removeInput(tag);\n }, []);\n return <PrimerCardholderNameEditTextRaw ref={ref.current} {...props} />;\n};\n\n// PrimerExpiryEditText\nexport const PrimerExpiryEditTextRaw = requireNativeComponent<{}>(\n 'PrimerExpiryEditText'\n);\n\ntype PrimerExpiryEditTextProps = ViewProps;\n\nexport const PrimerExpiryEditText: React.FC<PrimerExpiryEditTextProps> = (\n props\n) => {\n return <PrimerExpiryEditTextRaw {...props} />;\n};\n\n// cvv\nexport const PrimerCvvEditTextRaw = requireNativeComponent<{}>(\n 'PrimerCvvEditText'\n);\n\ntype PrimerCvvEditTextProps = ViewProps;\n\nexport const PrimerCvvEditText: React.FC<PrimerCvvEditTextProps> = (props) => {\n return <PrimerCvvEditTextRaw {...props} />;\n};\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.PrimerHeadlessUniversalCheckoutCardFormUIManager = void 0;
|
|
7
|
+
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
|
|
10
|
+
const {
|
|
11
|
+
PrimerHeadlessUniversalCheckoutCardFormUIManager
|
|
12
|
+
} = _reactNative.NativeModules;
|
|
13
|
+
exports.PrimerHeadlessUniversalCheckoutCardFormUIManager = PrimerHeadlessUniversalCheckoutCardFormUIManager;
|
|
14
|
+
//# sourceMappingURL=RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tsx"],"names":["PrimerHeadlessUniversalCheckoutCardFormUIManager","NativeModules"],"mappings":";;;;;;;AAAA;;AACO,MAAM;AAAEA,EAAAA;AAAF,IAAuDC,0BAA7D","sourcesContent":["import { NativeModules } from 'react-native';\nexport const { PrimerHeadlessUniversalCheckoutCardFormUIManager } = NativeModules;"]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
|
|
10
|
+
var _RNPrimer = _interopRequireDefault(require("../RNPrimer"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
const {
|
|
15
|
+
PrimerHeadlessUniversalCheckout
|
|
16
|
+
} = _reactNative.NativeModules;
|
|
17
|
+
const eventEmitter = new _reactNative.NativeEventEmitter(PrimerHeadlessUniversalCheckout);
|
|
18
|
+
let primerSettings = null;
|
|
19
|
+
const NativePrimerHeadlessUniversalCheckout = {
|
|
20
|
+
///////////////////////////////////////////
|
|
21
|
+
// Event Emitter
|
|
22
|
+
///////////////////////////////////////////
|
|
23
|
+
addListener: (eventType, listener) => {
|
|
24
|
+
eventEmitter.addListener(eventType, listener);
|
|
25
|
+
},
|
|
26
|
+
removeListener: (eventType, listener) => {
|
|
27
|
+
eventEmitter.removeListener(eventType, listener);
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
removeAllListenersForEvent(eventType) {
|
|
31
|
+
eventEmitter.removeAllListeners(eventType);
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
removeAllListeners() {
|
|
35
|
+
eventEmitter.removeAllListeners('preparationStarted');
|
|
36
|
+
eventEmitter.removeAllListeners('paymentMethodPresented');
|
|
37
|
+
eventEmitter.removeAllListeners('tokenizationStarted');
|
|
38
|
+
eventEmitter.removeAllListeners('tokenizationSucceeded');
|
|
39
|
+
eventEmitter.removeAllListeners('resume');
|
|
40
|
+
eventEmitter.removeAllListeners('error');
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
///////////////////////////////////////////
|
|
44
|
+
// Native API
|
|
45
|
+
///////////////////////////////////////////
|
|
46
|
+
getAssetForPaymentMethod: (paymentMethodType, assetType) => {
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
try {
|
|
49
|
+
PrimerHeadlessUniversalCheckout.getAssetForPaymentMethodType(paymentMethodType, assetType, err => {
|
|
50
|
+
reject(err);
|
|
51
|
+
}, url => {
|
|
52
|
+
resolve(url);
|
|
53
|
+
});
|
|
54
|
+
} catch (e) {
|
|
55
|
+
reject(e);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
getAssetForCardNetwork: (cardNetwork, assetType) => {
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
try {
|
|
62
|
+
PrimerHeadlessUniversalCheckout.getAssetForPaymentMethodType(cardNetwork, assetType, err => {
|
|
63
|
+
reject(err);
|
|
64
|
+
}, url => {
|
|
65
|
+
resolve(url);
|
|
66
|
+
});
|
|
67
|
+
} catch (e) {
|
|
68
|
+
reject(e);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
startWithClientToken(clientToken, settings) {
|
|
74
|
+
primerSettings = settings;
|
|
75
|
+
return new Promise((resolve, reject) => {
|
|
76
|
+
PrimerHeadlessUniversalCheckout.startWithClientToken(clientToken, JSON.stringify(settings), err => {
|
|
77
|
+
console.error(err);
|
|
78
|
+
reject(err);
|
|
79
|
+
}, paymentMethodTypes => {
|
|
80
|
+
resolve({
|
|
81
|
+
paymentMethodTypes
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
showPaymentMethod: async paymentMethod => {
|
|
88
|
+
if (primerSettings) {
|
|
89
|
+
let implementedRNCallbacks = {
|
|
90
|
+
isTokenAddedToVaultImplemented: false,
|
|
91
|
+
isOnResumeSuccessImplemented: primerSettings.onResumeSuccess !== undefined,
|
|
92
|
+
isOnResumeErrorImplemented: primerSettings.onFailure !== undefined,
|
|
93
|
+
isOnCheckoutDismissedImplemented: false,
|
|
94
|
+
isCheckoutFailedImplemented: primerSettings.onFailure !== undefined,
|
|
95
|
+
isClientSessionActionsImplemented: false
|
|
96
|
+
};
|
|
97
|
+
await _RNPrimer.default.setImplementedRNCallbacks(implementedRNCallbacks);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
PrimerHeadlessUniversalCheckout.showPaymentMethod(paymentMethod);
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
resumeWithClientToken(resumeToken) {
|
|
104
|
+
PrimerHeadlessUniversalCheckout.resumeWithClientToken(resumeToken);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
};
|
|
108
|
+
var _default = NativePrimerHeadlessUniversalCheckout;
|
|
109
|
+
exports.default = _default;
|
|
110
|
+
//# sourceMappingURL=NativePrimerHeadlessUniversalCheckout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["NativePrimerHeadlessUniversalCheckout.ts"],"names":["PrimerHeadlessUniversalCheckout","NativeModules","eventEmitter","NativeEventEmitter","primerSettings","NativePrimerHeadlessUniversalCheckout","addListener","eventType","listener","removeListener","removeAllListenersForEvent","removeAllListeners","getAssetForPaymentMethod","paymentMethodType","assetType","Promise","resolve","reject","getAssetForPaymentMethodType","err","url","e","getAssetForCardNetwork","cardNetwork","startWithClientToken","clientToken","settings","JSON","stringify","console","error","paymentMethodTypes","showPaymentMethod","paymentMethod","implementedRNCallbacks","isTokenAddedToVaultImplemented","isOnResumeSuccessImplemented","onResumeSuccess","undefined","isOnResumeErrorImplemented","onFailure","isOnCheckoutDismissedImplemented","isCheckoutFailedImplemented","isClientSessionActionsImplemented","RNPrimer","setImplementedRNCallbacks","resumeWithClientToken","resumeToken"],"mappings":"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","sourcesContent":["import { NativeEventEmitter, NativeModules } from 'react-native';\nimport type { PrimerSettings } from 'src/models/primer-settings';\nimport RNPrimer from '../RNPrimer';\nimport type { PrimerHeadlessUniversalCheckoutCallbacks } from './types';\n\nconst { PrimerHeadlessUniversalCheckout } = NativeModules;\n\nconst eventEmitter = new NativeEventEmitter(PrimerHeadlessUniversalCheckout);\n\ntype EventType =\n | 'preparationStarted'\n | 'paymentMethodPresented'\n | 'tokenizationStarted'\n | 'tokenizationSucceeded'\n | 'resume'\n | 'error';\n\nlet primerSettings: (PrimerSettings & PrimerHeadlessUniversalCheckoutCallbacks) | null = null;\n\nconst NativePrimerHeadlessUniversalCheckout = {\n ///////////////////////////////////////////\n // Event Emitter\n ///////////////////////////////////////////\n addListener: (eventType: EventType, listener: (...args: any[]) => any) => {\n eventEmitter.addListener(eventType, listener);\n },\n\n removeListener: (eventType: EventType, listener: (...args: any[]) => any) => {\n eventEmitter.removeListener(eventType, listener);\n },\n\n removeAllListenersForEvent(eventType: EventType) {\n eventEmitter.removeAllListeners(eventType);\n },\n\n removeAllListeners() {\n eventEmitter.removeAllListeners('preparationStarted');\n eventEmitter.removeAllListeners('paymentMethodPresented');\n eventEmitter.removeAllListeners('tokenizationStarted');\n eventEmitter.removeAllListeners('tokenizationSucceeded');\n eventEmitter.removeAllListeners('resume');\n eventEmitter.removeAllListeners('error');\n },\n\n ///////////////////////////////////////////\n // Native API\n ///////////////////////////////////////////\n getAssetForPaymentMethod: (\n paymentMethodType: string,\n assetType: 'logo' | 'icon'\n ): Promise<string> => {\n return new Promise((resolve, reject) => {\n try {\n PrimerHeadlessUniversalCheckout.getAssetForPaymentMethodType(\n paymentMethodType,\n assetType,\n (err: Error) => {\n reject(err);\n },\n (url: string) => {\n resolve(url);\n }\n );\n } catch (e) {\n reject(e);\n }\n });\n },\n\n getAssetForCardNetwork: (\n cardNetwork: string,\n assetType: 'logo' | 'icon'\n ): Promise<string> => {\n return new Promise((resolve, reject) => {\n try {\n PrimerHeadlessUniversalCheckout.getAssetForPaymentMethodType(\n cardNetwork,\n assetType,\n (err: Error) => {\n reject(err);\n },\n (url: string) => {\n resolve(url);\n }\n );\n } catch (e) {\n reject(e);\n }\n });\n },\n\n startWithClientToken(clientToken: string, settings: any): Promise<any> {\n primerSettings = settings;\n\n return new Promise((resolve, reject) => {\n PrimerHeadlessUniversalCheckout.startWithClientToken(\n clientToken,\n JSON.stringify(settings),\n (err: Error) => {\n console.error(err);\n reject(err);\n },\n (paymentMethodTypes: string[]) => {\n resolve({ paymentMethodTypes });\n }\n );\n });\n },\n\n showPaymentMethod: async (paymentMethod: string) => {\n if (primerSettings) {\n let implementedRNCallbacks: any = {\n isTokenAddedToVaultImplemented: false,\n isOnResumeSuccessImplemented: (primerSettings.onResumeSuccess !== undefined),\n isOnResumeErrorImplemented: (primerSettings.onFailure !== undefined),\n isOnCheckoutDismissedImplemented: false,\n isCheckoutFailedImplemented: (primerSettings.onFailure !== undefined),\n isClientSessionActionsImplemented: false\n };\n \n await RNPrimer.setImplementedRNCallbacks(implementedRNCallbacks);\n }\n \n PrimerHeadlessUniversalCheckout.showPaymentMethod(paymentMethod);\n },\n\n resumeWithClientToken(resumeToken: string) {\n PrimerHeadlessUniversalCheckout.resumeWithClientToken(resumeToken);\n }\n};\n\nexport default NativePrimerHeadlessUniversalCheckout;\n"]}
|