@primer-io/react-native 0.12.5 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +2 -2
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +191 -152
- package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +131 -86
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +3 -2
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEventsRN.kt +11 -0
- package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +11 -0
- package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +14 -0
- package/ios/DataModels/PrimerErrorRN.swift +32 -2
- package/ios/RNTPrimer.m +43 -0
- package/ios/RNTPrimer.swift +394 -0
- package/ios/ReactNative-Bridging-Header.h +1 -9
- package/ios/ReactNative.xcodeproj/project.pbxproj +44 -0
- package/lib/commonjs/Primer.js +221 -209
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/RNPrimer.js +145 -0
- package/lib/commonjs/RNPrimer.js.map +1 -0
- package/lib/commonjs/index.js +1 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/primer-intent.js.map +1 -1
- package/lib/commonjs/models/utils/redirectScheme.js +4 -0
- package/lib/commonjs/models/utils/redirectScheme.js.map +1 -0
- package/lib/module/Primer.js +203 -209
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/RNPrimer.js +136 -0
- package/lib/module/RNPrimer.js.map +1 -0
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/primer-intent.js.map +1 -1
- package/lib/module/models/utils/redirectScheme.js +2 -0
- package/lib/module/models/utils/redirectScheme.js.map +1 -0
- package/lib/typescript/Primer.d.ts +13 -0
- package/lib/typescript/RNPrimer.d.ts +24 -0
- package/lib/typescript/models/primer-callbacks.d.ts +7 -10
- package/lib/typescript/models/primer-config.d.ts +16 -13
- package/lib/typescript/models/primer-intent.d.ts +1 -1
- package/lib/typescript/models/primer-request.d.ts +2 -12
- package/lib/typescript/models/primer-settings.d.ts +3 -5
- package/lib/typescript/models/primer.d.ts +4 -4
- package/lib/typescript/models/utils/redirectScheme.d.ts +3 -0
- package/package.json +4 -1
- package/primer-io-react-native.podspec +2 -3
- package/src/Primer.ts +227 -177
- package/src/RNPrimer.ts +170 -0
- package/src/index.tsx +1 -0
- package/src/models/primer-callbacks.ts +9 -32
- package/src/models/primer-config.ts +23 -21
- package/src/models/primer-intent.ts +1 -1
- package/src/models/primer-request.ts +2 -16
- package/src/models/primer-settings.ts +3 -5
- package/src/models/primer.ts +5 -5
- package/src/models/utils/redirectScheme.ts +5 -0
- package/ios/PrimerRN+PrimerDelegate.swift +0 -147
- package/ios/PrimerRN.swift +0 -166
- package/ios/ReactNative.m +0 -34
|
@@ -1,48 +1,50 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
OnResumeSuccessCallback,
|
|
6
|
-
OnSavedPaymentInstrumentsFetchedCallback,
|
|
7
|
-
OnTokenAddedToVaultCallback,
|
|
8
|
-
OnTokenizeSuccessCallback,
|
|
9
|
-
} from './primer-callbacks';
|
|
1
|
+
import type { IClientSessionAction } from 'src/Primer';
|
|
2
|
+
import type { IPrimerError } from 'src/RNPrimer';
|
|
3
|
+
import type { PaymentInstrumentToken } from './payment-instrument-token';
|
|
4
|
+
import type { PrimerResumeHandler } from './primer-request';
|
|
10
5
|
import type { PrimerSettings } from './primer-settings';
|
|
11
6
|
import type { PrimerTheme } from './primer-theme';
|
|
12
7
|
|
|
13
|
-
export
|
|
14
|
-
interface IPrimerConfig {
|
|
8
|
+
export interface IPrimerConfig {
|
|
15
9
|
/**
|
|
16
10
|
* Include data for different payment methods (e.g. amount or business details)
|
|
17
11
|
*/
|
|
18
12
|
settings?: PrimerSettings;
|
|
13
|
+
|
|
19
14
|
/**
|
|
20
15
|
* Set colors and dimensions for the Primer UI.
|
|
21
16
|
*/
|
|
22
17
|
theme?: PrimerTheme;
|
|
18
|
+
|
|
19
|
+
// onClientTokenCallback?: (resumeHandler: PrimerResumeHandler) => void;
|
|
20
|
+
|
|
23
21
|
/**
|
|
24
|
-
* Use this callback to grab a Primer payment instrument
|
|
22
|
+
* Use this callback to grab a Primer payment instrument and complete a payment.
|
|
25
23
|
*/
|
|
26
|
-
onTokenizeSuccess?:
|
|
24
|
+
onTokenizeSuccess?: (paymentInstrument: PaymentInstrumentToken, resumeHandler: PrimerResumeHandler) => void;
|
|
27
25
|
|
|
28
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Use this callback to resume a PENDING payment with the token provided.
|
|
28
|
+
*/
|
|
29
|
+
onResumeSuccess?: (resumeToken: string, resumeHandler: PrimerResumeHandler | null) => void;
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* Use this callback to perform some action when a payment instrument was saved to Primer.
|
|
32
33
|
*/
|
|
33
|
-
onTokenAddedToVault?:
|
|
34
|
+
onTokenAddedToVault?: (paymentInstrument: PaymentInstrumentToken) => void;
|
|
35
|
+
|
|
34
36
|
/**
|
|
35
37
|
* Use this callback to perform some action when the Primer UI is dismissed.
|
|
36
38
|
*/
|
|
37
|
-
onDismiss?:
|
|
39
|
+
onDismiss?: () => void;
|
|
40
|
+
|
|
38
41
|
/**
|
|
39
42
|
* Use this callback to perform some action when the SDK throws an error.
|
|
40
43
|
*/
|
|
41
|
-
onError?:
|
|
44
|
+
onError?: (err: IPrimerError, resumeHandler: PrimerResumeHandler) => void;
|
|
45
|
+
|
|
42
46
|
/**
|
|
43
|
-
* Use this to
|
|
47
|
+
* Use this callback to perform actions on payment methods, like surcharging.
|
|
44
48
|
*/
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
onClientSessionActions?: OnClientSessionActionsCallback;
|
|
49
|
+
onClientSessionActions?: (clientSessionActions: IClientSessionAction[], resumeHandler: PrimerResumeHandler | null) => void;
|
|
48
50
|
}
|
|
@@ -34,7 +34,7 @@ const paymentMethods = [
|
|
|
34
34
|
export type SinglePrimerPaymentMethod = typeof paymentMethods[number];
|
|
35
35
|
export interface AnyPrimerPaymentMethodIntent {
|
|
36
36
|
vault: boolean;
|
|
37
|
-
paymentMethod:
|
|
37
|
+
paymentMethod: SinglePrimerPaymentMethod;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
export type PrimerPaymentMethodIntent = ISinglePrimerPaymentMethodIntent;
|
|
@@ -1,21 +1,7 @@
|
|
|
1
1
|
export type PrimerResumeHandler = IPrimerResumeHandler;
|
|
2
2
|
|
|
3
3
|
interface IPrimerResumeHandler {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
handleNewClientToken: (clientToken: string) => void;
|
|
5
|
+
handleError: (error: Error) => void;
|
|
6
6
|
handleSuccess: () => void;
|
|
7
|
-
|
|
8
|
-
handleNewClientToken: (token: string) => void;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @deprecated This method should not be used
|
|
12
|
-
* Please use handleError instead.
|
|
13
|
-
*/
|
|
14
|
-
resumeWithError: (error: string | null) => void;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @deprecated This method should not be used.
|
|
18
|
-
* Please use handleSuccess or handleNewClientToken instead.
|
|
19
|
-
*/
|
|
20
|
-
resumeWithSuccess: (clientToken: string | null) => void;
|
|
21
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { CountryCode } from './utils/countryCode';
|
|
2
2
|
import type { CurrencyCode } from './utils/currencyCode';
|
|
3
|
+
import type { RedirectScheme } from './utils/redirectScheme';
|
|
3
4
|
|
|
4
5
|
export type PrimerSettings = IPrimerSettings;
|
|
5
6
|
interface IPrimerSettings {
|
|
@@ -20,7 +21,7 @@ interface IOrder {
|
|
|
20
21
|
|
|
21
22
|
interface IOrderItem {
|
|
22
23
|
name: string;
|
|
23
|
-
|
|
24
|
+
amount: number;
|
|
24
25
|
quantity: number;
|
|
25
26
|
isPending?: boolean;
|
|
26
27
|
}
|
|
@@ -50,7 +51,7 @@ interface IOptions {
|
|
|
50
51
|
is3DSDevelopmentModeEnabled?: boolean;
|
|
51
52
|
locale?: string;
|
|
52
53
|
ios?: IIosOptions;
|
|
53
|
-
|
|
54
|
+
redirectScheme?: RedirectScheme;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
57
|
interface IIosOptions {
|
|
@@ -58,9 +59,6 @@ interface IIosOptions {
|
|
|
58
59
|
urlSchemeIdentifier?: string;
|
|
59
60
|
merchantIdentifier?: string;
|
|
60
61
|
}
|
|
61
|
-
interface IAndroidOptions {
|
|
62
|
-
redirectScheme?: string;
|
|
63
|
-
}
|
|
64
62
|
|
|
65
63
|
interface IAddress {
|
|
66
64
|
line1?: String;
|
package/src/models/primer.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IPrimerConfig } from './primer-config';
|
|
2
2
|
import type { PrimerPaymentMethodIntent } from './primer-intent';
|
|
3
3
|
|
|
4
4
|
export interface IPrimer {
|
|
@@ -11,7 +11,7 @@ export interface IPrimer {
|
|
|
11
11
|
* @param config Configuration object for the SDK. Use this to set listeners, theme,
|
|
12
12
|
* and payment method specific settings.
|
|
13
13
|
*/
|
|
14
|
-
showUniversalCheckout(token:
|
|
14
|
+
showUniversalCheckout(token: string | null, config: IPrimerConfig): void;
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Launch Primer's Vault Manager.
|
|
@@ -20,7 +20,7 @@ export interface IPrimer {
|
|
|
20
20
|
* @param config Configuration object for the SDK. Use this to set listeners, theme,
|
|
21
21
|
* and payment method specific settings.
|
|
22
22
|
*/
|
|
23
|
-
showVaultManager(token:
|
|
23
|
+
showVaultManager(token: string | null, config: IPrimerConfig): void;
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Launch checkout with a specific payment method
|
|
@@ -29,9 +29,9 @@ export interface IPrimer {
|
|
|
29
29
|
* @param config Configuration for the SDK.
|
|
30
30
|
*/
|
|
31
31
|
showPaymentMethod(
|
|
32
|
-
token:
|
|
32
|
+
token: string | null,
|
|
33
33
|
intent: PrimerPaymentMethodIntent,
|
|
34
|
-
config:
|
|
34
|
+
config: IPrimerConfig
|
|
35
35
|
): void;
|
|
36
36
|
|
|
37
37
|
/**
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// PrimerRN+PrimerDelegate.swift
|
|
3
|
-
// primer-io-react-native
|
|
4
|
-
//
|
|
5
|
-
// Created by Carl Eriksson on 22/09/2021.
|
|
6
|
-
//
|
|
7
|
-
import PrimerSDK
|
|
8
|
-
|
|
9
|
-
extension PrimerRN: PrimerDelegate {
|
|
10
|
-
|
|
11
|
-
func clientTokenCallback(_ completion: @escaping (String?, Error?) -> Void) {
|
|
12
|
-
guard let clientToken = clientToken else {
|
|
13
|
-
checkoutFailed(with: ErrorTypeRN.clientTokenNotConfigured)
|
|
14
|
-
completion(nil, ErrorTypeRN.clientTokenNotConfigured)
|
|
15
|
-
return
|
|
16
|
-
}
|
|
17
|
-
completion(clientToken, nil)
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
func onTokenizeSuccess(
|
|
21
|
-
_ paymentMethodToken: PaymentMethodToken,
|
|
22
|
-
resumeHandler: ResumeHandlerProtocol
|
|
23
|
-
) {
|
|
24
|
-
do {
|
|
25
|
-
let json = try encoder.encode(paymentMethodToken)
|
|
26
|
-
let data = String(data: json, encoding: .utf8)!
|
|
27
|
-
self.onTokenizeSuccessCallback?([data])
|
|
28
|
-
} catch {
|
|
29
|
-
checkoutFailed(with: ErrorTypeRN.ParseJsonFailed)
|
|
30
|
-
}
|
|
31
|
-
onResumeFlowCallback = { error, clientToken in
|
|
32
|
-
if let error = error {
|
|
33
|
-
resumeHandler.handle(error: error)
|
|
34
|
-
} else if let clientToken = clientToken {
|
|
35
|
-
resumeHandler.handle(newClientToken: clientToken)
|
|
36
|
-
} else {
|
|
37
|
-
resumeHandler.handleSuccess()
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
func onClientSessionActions(_ actions: [ClientSession.Action], resumeHandler: ResumeHandlerProtocol?) {
|
|
43
|
-
do {
|
|
44
|
-
let actionsRN: [[String: Any]] = actions.compactMap {
|
|
45
|
-
|
|
46
|
-
if ($0.`type` == "SELECT_PAYMENT_METHOD") {
|
|
47
|
-
let network = ($0.params?["binData"] as? [String: Any])?["network"] as? String
|
|
48
|
-
return [
|
|
49
|
-
"type": "SELECT_PAYMENT_METHOD",
|
|
50
|
-
"paymentMethodType": $0.params?["paymentMethodType"] as? String,
|
|
51
|
-
"network": network,
|
|
52
|
-
]
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if ($0.`type` == "UNSELECT_PAYMENT_METHOD") {
|
|
56
|
-
return [
|
|
57
|
-
"type": "UNSELECT_PAYMENT_METHOD",
|
|
58
|
-
]
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
if ($0.`type` == "SET_BILLING_ADDRESS") {
|
|
62
|
-
|
|
63
|
-
var billingAddress: [String: String] = [:]
|
|
64
|
-
|
|
65
|
-
$0.params?.forEach { entry in
|
|
66
|
-
if let value = entry.value as? String, !value.isEmpty {
|
|
67
|
-
billingAddress[entry.key] = value
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return [
|
|
72
|
-
"type": "SET_BILLING_ADDRESS",
|
|
73
|
-
"params": [ "billingAddress": billingAddress ]
|
|
74
|
-
]
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return [ "type": "UNKNOWN" ]
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
let request: [String: Any] = [
|
|
81
|
-
"actions": actionsRN
|
|
82
|
-
]
|
|
83
|
-
|
|
84
|
-
let data = try JSONSerialization.data(withJSONObject: request, options: .fragmentsAllowed)
|
|
85
|
-
let jsonString = String(data: data, encoding: .utf8)!
|
|
86
|
-
self.onClientSessionActionsCallback?([jsonString])
|
|
87
|
-
self.onClientSessionActionsCallback = nil
|
|
88
|
-
} catch {
|
|
89
|
-
checkoutFailed(with: ErrorTypeRN.ParseJsonFailed)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
onActionResumeCallback = { error, token in
|
|
93
|
-
if let token = token {
|
|
94
|
-
resumeHandler?.handle(newClientToken: token)
|
|
95
|
-
} else if let error = error {
|
|
96
|
-
resumeHandler?.handle(error: error)
|
|
97
|
-
} else {
|
|
98
|
-
resumeHandler?.handle(error: ErrorTypeRN.generic)
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
func onResumeSuccess(_ clientToken: String, resumeHandler: ResumeHandlerProtocol) {
|
|
104
|
-
self.onResumeSuccessCallback?([clientToken])
|
|
105
|
-
|
|
106
|
-
onResumeFlowCallback = { error, clientToken in
|
|
107
|
-
if let error = error {
|
|
108
|
-
resumeHandler.handle(error: error)
|
|
109
|
-
} else if let clientToken = clientToken {
|
|
110
|
-
resumeHandler.handle(newClientToken: clientToken)
|
|
111
|
-
} else {
|
|
112
|
-
resumeHandler.handleSuccess()
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
func tokenAddedToVault(_ token: PaymentMethodToken) {
|
|
118
|
-
do {
|
|
119
|
-
let json = try encoder.encode(token)
|
|
120
|
-
let data = String(data: json, encoding: .utf8)!
|
|
121
|
-
self.onVaultSuccessCallback?([data])
|
|
122
|
-
} catch {
|
|
123
|
-
checkoutFailed(with: ErrorTypeRN.ParseJsonFailed)
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
func onCheckoutDismissed() {
|
|
128
|
-
self.onDismissCallback?([])
|
|
129
|
-
self.onDismissCallback = nil
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
func checkoutFailed(with error: Error) {
|
|
133
|
-
do {
|
|
134
|
-
if let error = error as? ErrorTypeRN {
|
|
135
|
-
let exception = PrimerErrorRN(exceptionType: error, description: nil)
|
|
136
|
-
let json = try encoder.encode(exception)
|
|
137
|
-
let data = String(data: json, encoding: .utf8)!
|
|
138
|
-
self.onPrimerErrorCallback?([data])
|
|
139
|
-
} else {
|
|
140
|
-
self.onPrimerErrorCallback?(["{\"exceptionType\":\"CheckoutFlowFailed\"}"])
|
|
141
|
-
}
|
|
142
|
-
} catch {
|
|
143
|
-
self.onPrimerErrorCallback?(["{\"exceptionType\":\"ParseJsonFailed\"}"])
|
|
144
|
-
}
|
|
145
|
-
haltExecution = true
|
|
146
|
-
}
|
|
147
|
-
}
|
package/ios/PrimerRN.swift
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import UIKit
|
|
2
|
-
import PrimerSDK
|
|
3
|
-
|
|
4
|
-
typealias BasicCompletionBlock = ((Error?, String?) -> Void)
|
|
5
|
-
|
|
6
|
-
@objc(PrimerRN)
|
|
7
|
-
class PrimerRN: NSObject {
|
|
8
|
-
|
|
9
|
-
let encoder = JSONEncoder()
|
|
10
|
-
|
|
11
|
-
override init() {
|
|
12
|
-
encoder.outputFormatting = .prettyPrinted
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
var clientToken: String?
|
|
16
|
-
var settings: PrimerSettingsRN?
|
|
17
|
-
var theme: PrimerThemeRN?
|
|
18
|
-
var intent: PrimerIntentRN?
|
|
19
|
-
var onTokenizeSuccessCallback: RCTResponseSenderBlock?
|
|
20
|
-
var onClientSessionActionsCallback: RCTResponseSenderBlock?
|
|
21
|
-
var onResumeSuccessCallback: RCTResponseSenderBlock?
|
|
22
|
-
var onVaultSuccessCallback: RCTResponseSenderBlock?
|
|
23
|
-
var onDismissCallback: RCTResponseSenderBlock?
|
|
24
|
-
var onPrimerErrorCallback: RCTResponseSenderBlock?
|
|
25
|
-
var onResumeFlowCallback: BasicCompletionBlock?
|
|
26
|
-
var onActionResumeCallback: BasicCompletionBlock?
|
|
27
|
-
|
|
28
|
-
private var sdkWasInitialised = false
|
|
29
|
-
internal var haltExecution = false
|
|
30
|
-
|
|
31
|
-
@objc func configureSettings(_ request: String) {
|
|
32
|
-
do {
|
|
33
|
-
let json = request.data(using: .utf8)!
|
|
34
|
-
let settings = try JSONDecoder().decode(PrimerSettingsRN.self, from: json)
|
|
35
|
-
self.settings = settings
|
|
36
|
-
} catch {
|
|
37
|
-
checkoutFailed(with: ErrorTypeRN.ParseJsonFailed)
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@objc func configureTheme(_ request: String) {
|
|
42
|
-
do {
|
|
43
|
-
let json = request.data(using: .utf8)!
|
|
44
|
-
let themeRN = try JSONDecoder().decode(PrimerThemeRN.self, from: json)
|
|
45
|
-
self.theme = themeRN
|
|
46
|
-
} catch {
|
|
47
|
-
checkoutFailed(with: ErrorTypeRN.ParseJsonFailed)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
@objc func configureIntent(_ request: String) {
|
|
52
|
-
do {
|
|
53
|
-
let json = request.data(using: .utf8)!
|
|
54
|
-
let intent = try JSONDecoder().decode(PrimerIntentRN.self, from: json)
|
|
55
|
-
self.intent = intent
|
|
56
|
-
} catch {
|
|
57
|
-
checkoutFailed(with: ErrorTypeRN.ParseJsonFailed)
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
@objc func configureOnTokenizeSuccess(_ callback: @escaping RCTResponseSenderBlock) {
|
|
62
|
-
self.onTokenizeSuccessCallback = callback
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
@objc func configureOnClientSessionActions(_ callback: @escaping RCTResponseSenderBlock) {
|
|
66
|
-
self.onClientSessionActionsCallback = callback
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
@objc func configureOnResumeSuccess(_ callback: @escaping RCTResponseSenderBlock) {
|
|
70
|
-
self.onResumeSuccessCallback = callback
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
@objc func configureOnVaultSuccess(_ callback: @escaping RCTResponseSenderBlock) {
|
|
74
|
-
self.onVaultSuccessCallback = callback
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
@objc func configureOnDismiss(_ callback: @escaping RCTResponseSenderBlock) {
|
|
78
|
-
self.onDismissCallback = callback
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@objc func configureOnPrimerError(_ callback: @escaping RCTResponseSenderBlock) {
|
|
82
|
-
self.onPrimerErrorCallback = callback
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@objc func initialize(_ token: String) -> Void {
|
|
86
|
-
DispatchQueue.main.async { [weak self] in
|
|
87
|
-
do {
|
|
88
|
-
guard let viewController = RCTPresentedViewController() else {
|
|
89
|
-
throw ErrorTypeRN.noIosViewController
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
guard let intent = self?.intent else {
|
|
93
|
-
throw ErrorTypeRN.invalidPrimerIntent
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
guard
|
|
97
|
-
let settings = self?.settings?.asPrimerSettings(),
|
|
98
|
-
let theme = self?.theme?.asPrimerTheme()
|
|
99
|
-
else {
|
|
100
|
-
throw ErrorTypeRN.settingsNotConfigured
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
self?.clientToken = token
|
|
104
|
-
|
|
105
|
-
Primer.shared.delegate = self
|
|
106
|
-
Primer.shared.configure(settings: settings, theme: theme)
|
|
107
|
-
|
|
108
|
-
DispatchQueue.main.async {
|
|
109
|
-
if (intent.vault) {
|
|
110
|
-
Primer.shared.showVaultManager(on: viewController, clientToken: token)
|
|
111
|
-
} else {
|
|
112
|
-
Primer.shared.showUniversalCheckout(on: viewController, clientToken: token)
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
} catch {
|
|
116
|
-
self?.checkoutFailed(with: error)
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
@objc func resume(_ request: String) -> Void {
|
|
122
|
-
DispatchQueue.main.async { [weak self] in
|
|
123
|
-
do {
|
|
124
|
-
let json = request.data(using: .utf8)!
|
|
125
|
-
let request = try JSONDecoder().decode(PrimerResumeRequest.self, from: json)
|
|
126
|
-
|
|
127
|
-
if let error = request.error {
|
|
128
|
-
self?.onResumeFlowCallback?(ErrorRN(message: error), nil)
|
|
129
|
-
} else if let clientToken = request.token {
|
|
130
|
-
self?.onResumeFlowCallback?(nil, clientToken)
|
|
131
|
-
} else {
|
|
132
|
-
self?.onResumeFlowCallback?(nil, nil)
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
self?.onResumeFlowCallback = nil
|
|
136
|
-
} catch {
|
|
137
|
-
self?.checkoutFailed(with: error)
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
@objc func actionResume(_ request: String) -> Void {
|
|
143
|
-
DispatchQueue.main.async { [weak self] in
|
|
144
|
-
do {
|
|
145
|
-
let json = request.data(using: .utf8)!
|
|
146
|
-
let request = try JSONDecoder().decode(PrimerResumeRequest.self, from: json)
|
|
147
|
-
|
|
148
|
-
if let error = request.error {
|
|
149
|
-
self?.onActionResumeCallback?(ErrorRN(message: error), nil)
|
|
150
|
-
} else if let clientToken = request.token {
|
|
151
|
-
self?.onActionResumeCallback?(nil, clientToken)
|
|
152
|
-
} else {
|
|
153
|
-
self?.onActionResumeCallback?(nil, self?.clientToken)
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
self?.onActionResumeCallback = nil
|
|
157
|
-
} catch {
|
|
158
|
-
self?.checkoutFailed(with: error)
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
@objc func dispose() -> Void {
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
}
|
package/ios/ReactNative.m
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#import <React/RCTBridgeModule.h>
|
|
2
|
-
#import <React/RCTViewManager.h>
|
|
3
|
-
|
|
4
|
-
@interface RCT_EXTERN_MODULE(PrimerRN, RCTViewManager)
|
|
5
|
-
|
|
6
|
-
RCT_EXTERN_METHOD(configureSettings: (NSString *)request)
|
|
7
|
-
|
|
8
|
-
RCT_EXTERN_METHOD(configureTheme: (NSString *)request)
|
|
9
|
-
|
|
10
|
-
RCT_EXTERN_METHOD(configureIntent: (NSString *)request)
|
|
11
|
-
|
|
12
|
-
RCT_EXTERN_METHOD(configureOnTokenizeSuccess: (RCTResponseSenderBlock)callback)
|
|
13
|
-
|
|
14
|
-
RCT_EXTERN_METHOD(configureOnClientSessionActions: (RCTResponseSenderBlock)callback)
|
|
15
|
-
|
|
16
|
-
RCT_EXTERN_METHOD(configureOnResumeSuccess: (RCTResponseSenderBlock)callback)
|
|
17
|
-
|
|
18
|
-
RCT_EXTERN_METHOD(configureOnVaultSuccess: (RCTResponseSenderBlock)callback)
|
|
19
|
-
|
|
20
|
-
RCT_EXTERN_METHOD(configureOnDismiss: (RCTResponseSenderBlock)callback)
|
|
21
|
-
|
|
22
|
-
RCT_EXTERN_METHOD(configureOnPrimerError: (RCTResponseSenderBlock)callback)
|
|
23
|
-
|
|
24
|
-
RCT_EXTERN_METHOD(configureOnSavedPaymentInstrumentsFetched: (RCTResponseSenderBlock)callback)
|
|
25
|
-
|
|
26
|
-
RCT_EXTERN_METHOD(initialize: (NSString *)data)
|
|
27
|
-
|
|
28
|
-
RCT_EXTERN_METHOD(resume: (NSString *)data)
|
|
29
|
-
|
|
30
|
-
RCT_EXTERN_METHOD(actionResume: (NSString *)data)
|
|
31
|
-
|
|
32
|
-
RCT_EXTERN_METHOD(dispose)
|
|
33
|
-
|
|
34
|
-
@end
|