@primer-io/react-native 0.15.4 → 2.0.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/README.md +114 -24
- package/android/build.gradle +7 -2
- package/android/gradle.properties +3 -3
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +122 -143
- package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +212 -127
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutDataRN.kt +12 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +54 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +3 -7
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEvents.kt +13 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt +4 -4
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentMethodDataRN.kt +8 -0
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +43 -125
- package/android/src/main/java/com/primerioreactnative/extensions/Payment.kt +6 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerAddress.kt +15 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutData.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerClientSession.kt +15 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerCustomer.kt +13 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerLineItem.kt +8 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerOrder.kt +6 -0
- package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodData.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +1 -3
- package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +45 -0
- package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +16 -6
- package/ios/DataModels/ImplementedRNCallbacks.swift +31 -0
- package/ios/DataModels/PrimerErrorRN.swift +0 -17
- package/ios/DataModels/PrimerSettingsRN.swift +69 -150
- package/ios/DataModels/PrimerThemeRN.swift +1 -10
- package/ios/{Pods/Manifest.lock → Podfile.lock} +1 -1
- package/ios/RNTPrimer.m +26 -12
- package/ios/RNTPrimer.swift +297 -237
- package/ios/ReactNative.xcodeproj/project.pbxproj +14 -14
- package/lib/commonjs/Primer.js +187 -176
- package/lib/commonjs/Primer.js.map +1 -1
- package/lib/commonjs/RNPrimer.js +102 -40
- package/lib/commonjs/RNPrimer.js.map +1 -1
- package/lib/commonjs/index.js +117 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/Primer.js +6 -0
- package/lib/commonjs/models/{action-request.js.map → Primer.js.map} +0 -0
- package/lib/commonjs/models/PrimerCheckoutData.js +9 -0
- package/lib/commonjs/models/PrimerCheckoutData.js.map +1 -0
- package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js +2 -0
- package/lib/commonjs/models/{client-session-actions-request.js.map → PrimerCheckoutPaymentMethodData.js.map} +0 -0
- package/lib/commonjs/models/PrimerClientSession.js +2 -0
- package/lib/commonjs/models/{primer-callbacks.js.map → PrimerClientSession.js.map} +0 -0
- package/lib/commonjs/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
- package/lib/commonjs/models/PrimerCountryCode.js.map +1 -0
- package/lib/commonjs/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
- package/lib/commonjs/models/PrimerCurrencyCode.js.map +1 -0
- package/lib/commonjs/models/PrimerError.js +28 -0
- package/lib/commonjs/models/PrimerError.js.map +1 -0
- package/lib/commonjs/models/PrimerPaymentMethodTokenData.js +14 -0
- package/lib/commonjs/models/PrimerPaymentMethodTokenData.js.map +1 -0
- package/lib/commonjs/models/PrimerSessionIntent.js +14 -0
- package/lib/commonjs/models/PrimerSessionIntent.js.map +1 -0
- package/lib/commonjs/models/PrimerSettings.js +6 -0
- package/lib/commonjs/models/{primer-config.js.map → PrimerSettings.js.map} +0 -0
- package/lib/commonjs/models/PrimerTheme.js +2 -0
- package/lib/commonjs/models/{primer-request.js.map → PrimerTheme.js.map} +0 -0
- package/lib/commonjs/utils/index.js +1 -1
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/module/Primer.js +187 -162
- package/lib/module/Primer.js.map +1 -1
- package/lib/module/RNPrimer.js +102 -40
- package/lib/module/RNPrimer.js.map +1 -1
- package/lib/module/index.js +9 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/Primer.js +2 -0
- package/lib/{commonjs/models/primer-settings.js.map → module/models/Primer.js.map} +0 -0
- package/lib/module/models/PrimerCheckoutData.js +7 -0
- package/lib/module/models/PrimerCheckoutData.js.map +1 -0
- package/lib/module/models/PrimerCheckoutPaymentMethodData.js +2 -0
- package/lib/{commonjs/models/primer-theme.js.map → module/models/PrimerCheckoutPaymentMethodData.js.map} +0 -0
- package/lib/module/models/PrimerClientSession.js +2 -0
- package/lib/{commonjs/models/primer.js.map → module/models/PrimerClientSession.js.map} +0 -0
- package/lib/module/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
- package/lib/module/models/PrimerCountryCode.js.map +1 -0
- package/lib/module/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
- package/lib/module/models/PrimerCurrencyCode.js.map +1 -0
- package/lib/module/models/PrimerError.js +19 -0
- package/lib/module/models/PrimerError.js.map +1 -0
- package/lib/module/models/PrimerPaymentMethodTokenData.js +7 -0
- package/lib/module/models/PrimerPaymentMethodTokenData.js.map +1 -0
- package/lib/module/models/PrimerSessionIntent.js +7 -0
- package/lib/module/models/PrimerSessionIntent.js.map +1 -0
- package/lib/module/models/PrimerSettings.js +2 -0
- package/lib/module/models/{action-request.js.map → PrimerSettings.js.map} +0 -0
- package/lib/module/models/PrimerTheme.js +2 -0
- package/lib/module/models/{client-session-actions-request.js.map → PrimerTheme.js.map} +0 -0
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/Primer.d.ts +2 -15
- package/lib/typescript/RNPrimer.d.ts +16 -9
- package/lib/typescript/index.d.ts +9 -3
- package/lib/typescript/models/Primer.d.ts +26 -0
- package/lib/typescript/models/PrimerCheckoutData.d.ts +15 -0
- package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts +5 -0
- package/lib/typescript/models/PrimerClientSession.d.ts +45 -0
- package/lib/typescript/models/{utils/countryCode.d.ts → PrimerCountryCode.d.ts} +1 -1
- package/lib/typescript/models/{utils/currencyCode.d.ts → PrimerCurrencyCode.d.ts} +1 -1
- package/lib/typescript/models/PrimerError.d.ts +11 -0
- package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts +116 -0
- package/lib/typescript/models/PrimerSessionIntent.d.ts +4 -0
- package/lib/typescript/models/PrimerSettings.d.ts +73 -0
- package/lib/typescript/models/{primer-theme.d.ts → PrimerTheme.d.ts} +1 -1
- package/lib/typescript/utils/index.d.ts +1 -1
- package/package.json +1 -1
- package/primer-io-react-native.podspec +1 -1
- package/src/Primer.ts +214 -196
- package/src/RNPrimer.ts +135 -50
- package/src/index.tsx +33 -6
- package/src/models/Primer.ts +35 -0
- package/src/models/PrimerCheckoutData.ts +18 -0
- package/src/models/PrimerCheckoutPaymentMethodData.ts +5 -0
- package/src/models/PrimerClientSession.ts +53 -0
- package/src/models/{utils/countryCode.ts → PrimerCountryCode.ts} +1 -1
- package/src/models/{utils/currencyCode.ts → PrimerCurrencyCode.ts} +1 -1
- package/src/models/PrimerError.ts +20 -0
- package/src/models/PrimerPaymentMethodTokenData.ts +130 -0
- package/src/models/PrimerSessionIntent.ts +4 -0
- package/src/models/PrimerSettings.ts +93 -0
- package/src/models/{primer-theme.ts → PrimerTheme.ts} +1 -1
- package/src/utils/index.ts +1 -1
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEventsRN.kt +0 -11
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerIntentRN.kt +0 -80
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerOnClientSessionActionsRequestRN.kt +0 -65
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerRequestRN.kt +0 -9
- package/android/src/main/java/com/primerioreactnative/datamodels/PrimerThemeRN.kt +0 -51
- package/android/src/main/java/com/primerioreactnative/utils/PrimerEventQueueRN.kt +0 -30
- package/ios/DataModels/PrimerIntentRN.swift +0 -10
- package/ios/DataModels/PrimerRequestRN.swift +0 -14
- 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
- package/lib/commonjs/models/action-request.js +0 -2
- package/lib/commonjs/models/client-session-actions-request.js +0 -2
- package/lib/commonjs/models/payment-instrument-token.js +0 -30
- package/lib/commonjs/models/payment-instrument-token.js.map +0 -1
- package/lib/commonjs/models/primer-callbacks.js +0 -2
- package/lib/commonjs/models/primer-config.js +0 -2
- package/lib/commonjs/models/primer-error.js +0 -4
- package/lib/commonjs/models/primer-error.js.map +0 -1
- package/lib/commonjs/models/primer-intent.js +0 -4
- package/lib/commonjs/models/primer-intent.js.map +0 -1
- package/lib/commonjs/models/primer-request.js +0 -2
- package/lib/commonjs/models/primer-settings.js +0 -2
- package/lib/commonjs/models/primer-theme.js +0 -2
- package/lib/commonjs/models/primer.js +0 -2
- package/lib/commonjs/models/utils/countryCode.js.map +0 -1
- package/lib/commonjs/models/utils/currencyCode.js.map +0 -1
- package/lib/commonjs/models/utils/redirectScheme.js +0 -4
- package/lib/commonjs/models/utils/redirectScheme.js.map +0 -1
- package/lib/module/models/action-request.js +0 -2
- package/lib/module/models/client-session-actions-request.js +0 -2
- package/lib/module/models/payment-instrument-token.js +0 -28
- package/lib/module/models/payment-instrument-token.js.map +0 -1
- package/lib/module/models/primer-callbacks.js +0 -2
- package/lib/module/models/primer-callbacks.js.map +0 -1
- package/lib/module/models/primer-config.js +0 -2
- package/lib/module/models/primer-config.js.map +0 -1
- package/lib/module/models/primer-error.js +0 -2
- package/lib/module/models/primer-error.js.map +0 -1
- package/lib/module/models/primer-intent.js +0 -2
- package/lib/module/models/primer-intent.js.map +0 -1
- package/lib/module/models/primer-request.js +0 -2
- package/lib/module/models/primer-request.js.map +0 -1
- package/lib/module/models/primer-settings.js +0 -2
- package/lib/module/models/primer-settings.js.map +0 -1
- package/lib/module/models/primer-theme.js +0 -2
- package/lib/module/models/primer-theme.js.map +0 -1
- package/lib/module/models/primer.js +0 -2
- package/lib/module/models/primer.js.map +0 -1
- package/lib/module/models/utils/countryCode.js.map +0 -1
- package/lib/module/models/utils/currencyCode.js.map +0 -1
- package/lib/module/models/utils/redirectScheme.js +0 -2
- package/lib/module/models/utils/redirectScheme.js.map +0 -1
- package/lib/typescript/models/action-request.d.ts +0 -10
- package/lib/typescript/models/client-session-actions-request.d.ts +0 -15
- package/lib/typescript/models/payment-instrument-token.d.ts +0 -76
- package/lib/typescript/models/primer-callbacks.d.ts +0 -10
- package/lib/typescript/models/primer-config.d.ts +0 -40
- package/lib/typescript/models/primer-error.d.ts +0 -8
- package/lib/typescript/models/primer-intent.d.ts +0 -13
- package/lib/typescript/models/primer-request.d.ts +0 -7
- package/lib/typescript/models/primer-settings.d.ts +0 -63
- package/lib/typescript/models/primer.d.ts +0 -33
- package/lib/typescript/models/utils/redirectScheme.d.ts +0 -3
- package/src/models/action-request.ts +0 -12
- package/src/models/client-session-actions-request.ts +0 -21
- package/src/models/payment-instrument-token.ts +0 -109
- package/src/models/primer-callbacks.ts +0 -14
- package/src/models/primer-config.ts +0 -50
- package/src/models/primer-error.ts +0 -19
- package/src/models/primer-intent.ts +0 -49
- package/src/models/primer-request.ts +0 -7
- package/src/models/primer-settings.ts +0 -70
- package/src/models/primer.ts +0 -41
- package/src/models/utils/redirectScheme.ts +0 -5
package/src/RNPrimer.ts
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { NativeEventEmitter, NativeModules } from 'react-native';
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
2
|
+
import type { PrimerSessionIntent } from './models/PrimerSessionIntent';
|
|
3
|
+
import type { PrimerSettings } from './models/PrimerSettings';
|
|
4
4
|
|
|
5
5
|
const { NativePrimer } = NativeModules;
|
|
6
6
|
const eventEmitter = new NativeEventEmitter(NativePrimer);
|
|
7
7
|
|
|
8
8
|
type EventType =
|
|
9
|
-
| '
|
|
10
|
-
| '
|
|
11
|
-
| '
|
|
12
|
-
| '
|
|
13
|
-
| 'onResumeSuccess'
|
|
14
|
-
| 'onCheckoutDismissed'
|
|
9
|
+
| 'onCheckoutComplete'
|
|
10
|
+
| 'onBeforeClientSessionUpdate'
|
|
11
|
+
| 'onClientSessionUpdate'
|
|
12
|
+
| 'onBeforePaymentCreate'
|
|
15
13
|
| 'onError'
|
|
14
|
+
| 'onDismiss'
|
|
15
|
+
| 'onTokenizeSuccess'
|
|
16
|
+
| 'onResumeSuccess'
|
|
16
17
|
| 'detectImplementedRNCallbacks';
|
|
17
18
|
|
|
18
19
|
export interface IPrimerError {
|
|
@@ -21,10 +22,23 @@ export interface IPrimerError {
|
|
|
21
22
|
recoverySuggestion?: string
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
const eventTypes: EventType[] = [
|
|
26
|
+
'onCheckoutComplete',
|
|
27
|
+
'onBeforeClientSessionUpdate',
|
|
28
|
+
'onClientSessionUpdate',
|
|
29
|
+
'onBeforePaymentCreate',
|
|
30
|
+
'onError',
|
|
31
|
+
'onDismiss',
|
|
32
|
+
'onTokenizeSuccess',
|
|
33
|
+
'onResumeSuccess',
|
|
34
|
+
'detectImplementedRNCallbacks'
|
|
35
|
+
];
|
|
36
|
+
|
|
24
37
|
const RNPrimer = {
|
|
25
38
|
///////////////////////////////////////////
|
|
26
39
|
// Event Emitter
|
|
27
40
|
///////////////////////////////////////////
|
|
41
|
+
|
|
28
42
|
addListener: (eventType: EventType, listener: (...args: any[]) => any) => {
|
|
29
43
|
eventEmitter.addListener(eventType, listener);
|
|
30
44
|
},
|
|
@@ -38,34 +52,16 @@ const RNPrimer = {
|
|
|
38
52
|
},
|
|
39
53
|
|
|
40
54
|
removeAllListeners() {
|
|
41
|
-
|
|
42
|
-
eventEmitter.removeAllListeners('onClientSessionActions');
|
|
43
|
-
eventEmitter.removeAllListeners('onTokenizeSuccessCallback');
|
|
44
|
-
eventEmitter.removeAllListeners('onResumeSuccess');
|
|
45
|
-
eventEmitter.removeAllListeners('onCheckoutDismissed');
|
|
46
|
-
eventEmitter.removeAllListeners('onError');
|
|
47
|
-
eventEmitter.removeAllListeners('detectImplementedRNCallbacks');
|
|
55
|
+
eventTypes.forEach((eventType) => RNPrimer.removeAllListenersForEvent(eventType));
|
|
48
56
|
},
|
|
49
57
|
|
|
50
58
|
///////////////////////////////////////////
|
|
51
59
|
// Native API
|
|
52
60
|
///////////////////////////////////////////
|
|
53
|
-
configure: (
|
|
54
|
-
settings: PrimerSettings | null,
|
|
55
|
-
theme: PrimerTheme | null
|
|
56
|
-
): Promise<void> => {
|
|
61
|
+
configure: (settings: PrimerSettings | undefined): Promise<void> => {
|
|
57
62
|
return new Promise(async (resolve, reject) => {
|
|
58
63
|
try {
|
|
59
|
-
|
|
60
|
-
// Do nothing, SDK will use default settings and theme.
|
|
61
|
-
} else if (settings && theme === null) {
|
|
62
|
-
await NativePrimer.configureWithSettings(JSON.stringify(settings));
|
|
63
|
-
} else if (settings === null && theme) {
|
|
64
|
-
await NativePrimer.configureWithTheme(JSON.stringify(theme));
|
|
65
|
-
} else {
|
|
66
|
-
await NativePrimer.configureWithSettings(JSON.stringify(settings));
|
|
67
|
-
await NativePrimer.configureWithTheme(JSON.stringify(theme));
|
|
68
|
-
}
|
|
64
|
+
await NativePrimer.configure(JSON.stringify(settings) || "");
|
|
69
65
|
resolve();
|
|
70
66
|
} catch (err) {
|
|
71
67
|
reject(err);
|
|
@@ -73,14 +69,10 @@ const RNPrimer = {
|
|
|
73
69
|
});
|
|
74
70
|
},
|
|
75
71
|
|
|
76
|
-
showUniversalCheckout: (clientToken: string
|
|
72
|
+
showUniversalCheckout: (clientToken: string): Promise<void> => {
|
|
77
73
|
return new Promise(async (resolve, reject) => {
|
|
78
74
|
try {
|
|
79
|
-
|
|
80
|
-
await NativePrimer.showUniversalCheckoutWithClientToken(clientToken);
|
|
81
|
-
} else {
|
|
82
|
-
await NativePrimer.showUniversalCheckout();
|
|
83
|
-
}
|
|
75
|
+
await NativePrimer.showUniversalCheckoutWithClientToken(clientToken);
|
|
84
76
|
resolve();
|
|
85
77
|
} catch (err) {
|
|
86
78
|
reject(err);
|
|
@@ -91,11 +83,7 @@ const RNPrimer = {
|
|
|
91
83
|
showVaultManager: (clientToken: string | undefined): Promise<void> => {
|
|
92
84
|
return new Promise(async (resolve, reject) => {
|
|
93
85
|
try {
|
|
94
|
-
|
|
95
|
-
await NativePrimer.showVaultManager(clientToken);
|
|
96
|
-
} else {
|
|
97
|
-
await NativePrimer.showVaultManager();
|
|
98
|
-
}
|
|
86
|
+
await NativePrimer.showVaultManagerWithClientToken(clientToken);
|
|
99
87
|
resolve();
|
|
100
88
|
} catch (err) {
|
|
101
89
|
reject(err);
|
|
@@ -104,13 +92,41 @@ const RNPrimer = {
|
|
|
104
92
|
},
|
|
105
93
|
|
|
106
94
|
showPaymentMethod: (
|
|
107
|
-
clientToken: string,
|
|
108
95
|
paymentMethodType: string,
|
|
109
|
-
intent:
|
|
96
|
+
intent: PrimerSessionIntent,
|
|
97
|
+
clientToken: string
|
|
110
98
|
): Promise<void> => {
|
|
111
99
|
return new Promise(async (resolve, reject) => {
|
|
112
100
|
try {
|
|
113
|
-
await NativePrimer.showPaymentMethod(
|
|
101
|
+
await NativePrimer.showPaymentMethod(paymentMethodType, intent, clientToken);
|
|
102
|
+
resolve();
|
|
103
|
+
} catch (err) {
|
|
104
|
+
reject(err);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
dismiss: (): Promise<void> => {
|
|
110
|
+
return new Promise(async (resolve, reject) => {
|
|
111
|
+
try {
|
|
112
|
+
await NativePrimer.dismiss();
|
|
113
|
+
resolve();
|
|
114
|
+
} catch (err) {
|
|
115
|
+
reject(err);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
///////////////////////////////////////////
|
|
121
|
+
// DECISION HANDLERS
|
|
122
|
+
///////////////////////////////////////////
|
|
123
|
+
|
|
124
|
+
// Tokenization Handlers
|
|
125
|
+
|
|
126
|
+
handleTokenizationNewClientToken: (newClientToken: string): Promise<void> => {
|
|
127
|
+
return new Promise(async (resolve, reject) => {
|
|
128
|
+
try {
|
|
129
|
+
await NativePrimer.handleTokenizationNewClientToken(newClientToken);
|
|
114
130
|
resolve();
|
|
115
131
|
} catch (err) {
|
|
116
132
|
reject(err);
|
|
@@ -118,10 +134,10 @@ const RNPrimer = {
|
|
|
118
134
|
});
|
|
119
135
|
},
|
|
120
136
|
|
|
121
|
-
|
|
137
|
+
handleTokenizationSuccess: (): Promise<void> => {
|
|
122
138
|
return new Promise(async (resolve, reject) => {
|
|
123
139
|
try {
|
|
124
|
-
await NativePrimer.
|
|
140
|
+
await NativePrimer.handleTokenizationSuccess();
|
|
125
141
|
resolve();
|
|
126
142
|
} catch (err) {
|
|
127
143
|
reject(err);
|
|
@@ -129,10 +145,10 @@ const RNPrimer = {
|
|
|
129
145
|
});
|
|
130
146
|
},
|
|
131
147
|
|
|
132
|
-
|
|
148
|
+
handleTokenizationFailure: (errorMessage: string | null): Promise<void> => {
|
|
133
149
|
return new Promise(async (resolve, reject) => {
|
|
134
150
|
try {
|
|
135
|
-
await NativePrimer.
|
|
151
|
+
await NativePrimer.handleTokenizationFailure(errorMessage || "");
|
|
136
152
|
resolve();
|
|
137
153
|
} catch (err) {
|
|
138
154
|
reject(err);
|
|
@@ -140,6 +156,78 @@ const RNPrimer = {
|
|
|
140
156
|
});
|
|
141
157
|
},
|
|
142
158
|
|
|
159
|
+
// Resume Handlers
|
|
160
|
+
|
|
161
|
+
handleResumeWithNewClientToken: (newClientToken: string): Promise<void> => {
|
|
162
|
+
return new Promise(async (resolve, reject) => {
|
|
163
|
+
try {
|
|
164
|
+
await NativePrimer.handleResumeWithNewClientToken(newClientToken);
|
|
165
|
+
resolve();
|
|
166
|
+
} catch (err) {
|
|
167
|
+
reject(err);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
},
|
|
171
|
+
|
|
172
|
+
handleResumeSuccess: (): Promise<void> => {
|
|
173
|
+
return new Promise(async (resolve, reject) => {
|
|
174
|
+
try {
|
|
175
|
+
await NativePrimer.handleResumeSuccess();
|
|
176
|
+
resolve();
|
|
177
|
+
} catch (err) {
|
|
178
|
+
reject(err);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
handleResumeFailure: (errorMessage: string | null): Promise<void> => {
|
|
184
|
+
return new Promise(async (resolve, reject) => {
|
|
185
|
+
try {
|
|
186
|
+
await NativePrimer.handleTokenizationFailure(errorMessage || "");
|
|
187
|
+
resolve();
|
|
188
|
+
} catch (err) {
|
|
189
|
+
reject(err);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
},
|
|
193
|
+
|
|
194
|
+
// Payment Creation Handlers
|
|
195
|
+
|
|
196
|
+
handlePaymentCreationAbort: (errorMessage: string | null): Promise<void> => {
|
|
197
|
+
return new Promise(async (resolve, reject) => {
|
|
198
|
+
try {
|
|
199
|
+
await NativePrimer.handlePaymentCreationAbort(errorMessage || "");
|
|
200
|
+
resolve();
|
|
201
|
+
} catch (err) {
|
|
202
|
+
reject(err);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
},
|
|
206
|
+
|
|
207
|
+
handlePaymentCreationContinue: (): Promise<void> => {
|
|
208
|
+
return new Promise(async (resolve, reject) => {
|
|
209
|
+
try {
|
|
210
|
+
await NativePrimer.handlePaymentCreationContinue();
|
|
211
|
+
resolve();
|
|
212
|
+
} catch (err) {
|
|
213
|
+
reject(err);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
},
|
|
217
|
+
|
|
218
|
+
// Error Handler
|
|
219
|
+
|
|
220
|
+
showErrorMessage: (errorMessage: string | null): Promise<void> => {
|
|
221
|
+
return new Promise(async (resolve, reject) => {
|
|
222
|
+
try {
|
|
223
|
+
await NativePrimer.showErrorMessage(errorMessage || "");
|
|
224
|
+
resolve();
|
|
225
|
+
} catch (err) {
|
|
226
|
+
reject(err);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
},
|
|
230
|
+
|
|
143
231
|
handleSuccess: (): Promise<void> => {
|
|
144
232
|
return new Promise(async (resolve, reject) => {
|
|
145
233
|
try {
|
|
@@ -162,9 +250,6 @@ const RNPrimer = {
|
|
|
162
250
|
});
|
|
163
251
|
},
|
|
164
252
|
|
|
165
|
-
dispose: (): void => {
|
|
166
|
-
|
|
167
|
-
}
|
|
168
253
|
};
|
|
169
254
|
|
|
170
255
|
export default RNPrimer;
|
package/src/index.tsx
CHANGED
|
@@ -1,7 +1,34 @@
|
|
|
1
|
-
import type { IPrimer } from './models/primer';
|
|
2
|
-
import { PrimerNativeMapping } from './Primer';
|
|
3
|
-
// import type { IPrimerConfig as PrimerConfig } from './models/primer-config';
|
|
4
1
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
export {
|
|
3
|
+
Primer
|
|
4
|
+
} from './Primer';
|
|
5
|
+
export {
|
|
6
|
+
PrimerSettings
|
|
7
|
+
} from './models/PrimerSettings';
|
|
8
|
+
export {
|
|
9
|
+
PrimerSessionIntent
|
|
10
|
+
} from './models/PrimerSessionIntent';
|
|
11
|
+
export {
|
|
12
|
+
PrimerPaymentCreationHandler,
|
|
13
|
+
PrimerTokenizationHandler,
|
|
14
|
+
PrimerResumeHandler,
|
|
15
|
+
PrimerErrorHandler,
|
|
16
|
+
} from './models/Primer';
|
|
17
|
+
export { PrimerPaymentMethodTokenData } from './models/PrimerPaymentMethodTokenData';
|
|
18
|
+
export {
|
|
19
|
+
PrimerClientSession,
|
|
20
|
+
PrimerOrder,
|
|
21
|
+
PrimerLineItem,
|
|
22
|
+
PrimerCustomer,
|
|
23
|
+
PrimerAddress,
|
|
24
|
+
} from './models/PrimerClientSession';
|
|
25
|
+
export {
|
|
26
|
+
PrimerCheckoutData,
|
|
27
|
+
PrimerCheckoutDataPayment,
|
|
28
|
+
} from './models/PrimerCheckoutData';
|
|
29
|
+
export {
|
|
30
|
+
PrimerCheckoutPaymentMethodData
|
|
31
|
+
} from './models/PrimerCheckoutPaymentMethodData';
|
|
32
|
+
export {
|
|
33
|
+
PrimerError
|
|
34
|
+
} from './models/PrimerError';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { PrimerSessionIntent } from "./PrimerSessionIntent";
|
|
2
|
+
import type { PrimerSettings } from "./PrimerSettings";
|
|
3
|
+
|
|
4
|
+
export interface Primer {
|
|
5
|
+
configure(settings: PrimerSettings): Promise<void>;
|
|
6
|
+
showUniversalCheckout(clientToken: string): Promise<void>;
|
|
7
|
+
showVaultManager(clientToken: string): Promise<void>;
|
|
8
|
+
showPaymentMethod(
|
|
9
|
+
paymentMethodType: string,
|
|
10
|
+
intent: PrimerSessionIntent,
|
|
11
|
+
clientToken: string
|
|
12
|
+
): Promise<void>
|
|
13
|
+
dismiss(): void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface PrimerPaymentCreationHandler {
|
|
17
|
+
abortPaymentCreation(errorMessage: string | null): void;
|
|
18
|
+
continuePaymentCreation(): void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface PrimerTokenizationHandler {
|
|
22
|
+
handleSuccess(): void;
|
|
23
|
+
handleFailure(errorMessage: string | null): void;
|
|
24
|
+
continueWithNewClientToken(newClientToken: string): void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface PrimerResumeHandler {
|
|
28
|
+
handleSuccess(): void;
|
|
29
|
+
handleFailure(errorMessage: string | null): void;
|
|
30
|
+
continueWithNewClientToken(newClientToken: string): void;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface PrimerErrorHandler {
|
|
34
|
+
showErrorMessage(errorMessage: string | null): void;
|
|
35
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type PrimerCheckoutData = IPrimerCheckoutData;
|
|
2
|
+
|
|
3
|
+
interface IPrimerCheckoutData {
|
|
4
|
+
payment: IPrimerCheckoutDataPayment;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export type PrimerCheckoutDataPayment = IPrimerCheckoutDataPayment;
|
|
8
|
+
|
|
9
|
+
interface IPrimerCheckoutDataPayment {
|
|
10
|
+
id?: string;
|
|
11
|
+
orderId?: string;
|
|
12
|
+
paymentFailureReason?: PrimerPaymentErrorCode;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
enum PrimerPaymentErrorCode {
|
|
16
|
+
FAILED = 'payment-failed',
|
|
17
|
+
CANCELLED_BY_CUSTOMER = 'cancelled-by-customer',
|
|
18
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export type PrimerClientSession = IPrimerClientSession;
|
|
2
|
+
|
|
3
|
+
interface IPrimerClientSession {
|
|
4
|
+
customerId?: string;
|
|
5
|
+
orderId?: string;
|
|
6
|
+
currencyCode?: string;
|
|
7
|
+
totalAmount?: number;
|
|
8
|
+
lineItems?: IPrimerLineItem[];
|
|
9
|
+
orderDetails?: IPrimerOrder;
|
|
10
|
+
customer?: IPrimerCustomer;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type PrimerLineItem = IPrimerLineItem;
|
|
14
|
+
|
|
15
|
+
interface IPrimerLineItem {
|
|
16
|
+
itemId?: string;
|
|
17
|
+
itemDescription?: string;
|
|
18
|
+
amount?: number;
|
|
19
|
+
discountAmount?: number;
|
|
20
|
+
quantity?: number;
|
|
21
|
+
taxCode?: string;
|
|
22
|
+
taxAmount?: number;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type PrimerOrder = IPrimerOrder;
|
|
26
|
+
|
|
27
|
+
interface IPrimerOrder {
|
|
28
|
+
countryCode?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type PrimerCustomer = IPrimerCustomer;
|
|
32
|
+
|
|
33
|
+
interface IPrimerCustomer {
|
|
34
|
+
emailAddress?: string;
|
|
35
|
+
mobileNumber?: string;
|
|
36
|
+
firstName?: string;
|
|
37
|
+
lastName?: string;
|
|
38
|
+
billingAddress?: IPrimerAddress;
|
|
39
|
+
shippingAddress?: IPrimerAddress;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export type PrimerAddress = IPrimerAddress;
|
|
43
|
+
|
|
44
|
+
interface IPrimerAddress {
|
|
45
|
+
firstName?: string;
|
|
46
|
+
lastName?: string;
|
|
47
|
+
addressLine1?: string;
|
|
48
|
+
addressLine2?: string;
|
|
49
|
+
postalCode?: string;
|
|
50
|
+
city?: string;
|
|
51
|
+
state?: string;
|
|
52
|
+
countryCode?: string;
|
|
53
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface IPrimerError {
|
|
2
|
+
errorId: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
recoverySuggestion?: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
export class PrimerError extends Error {
|
|
9
|
+
|
|
10
|
+
errorId: string;
|
|
11
|
+
description: string;
|
|
12
|
+
recoverySuggestion?: string;
|
|
13
|
+
|
|
14
|
+
constructor(errorId: string, description: string, recoverySuggestion: string | undefined) {
|
|
15
|
+
super(description);
|
|
16
|
+
this.errorId = errorId;
|
|
17
|
+
this.description = description;
|
|
18
|
+
this.recoverySuggestion = recoverySuggestion;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
export type PrimerPaymentMethodTokenData = IPrimerPaymentMethodTokenData;
|
|
2
|
+
|
|
3
|
+
export interface IPrimerPaymentMethodTokenData {
|
|
4
|
+
analyticsId?: string;
|
|
5
|
+
id?: string;
|
|
6
|
+
isVaulted?: boolean;
|
|
7
|
+
paymentInstrumentData: IPrimerPaymentInstrumentData;
|
|
8
|
+
paymentInstrumentType: string;
|
|
9
|
+
token: string;
|
|
10
|
+
tokenType?: PrimerTokenType;
|
|
11
|
+
threeDSecureAuthentication?: IPrimerThreeDSAuthenticationData;
|
|
12
|
+
vaultData?: IPrimerVaultData;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export enum PrimerTokenType {
|
|
16
|
+
SINGLE_USE = 'SINGLE_USE',
|
|
17
|
+
MULTI_USE = 'MULTI_USE',
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface IPrimerThreeDSAuthenticationData {
|
|
21
|
+
challengeIssued?: boolean;
|
|
22
|
+
protocolVersion?: string;
|
|
23
|
+
reasonCode?: string;
|
|
24
|
+
reasonText?: string;
|
|
25
|
+
responseCode?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface IPrimerVaultData {
|
|
29
|
+
customerId?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface IPrimerPaymentInstrumentData {
|
|
33
|
+
paypalBillingAgreementId?: string;
|
|
34
|
+
first6Digits?: string;
|
|
35
|
+
last4Digits?: string;
|
|
36
|
+
expirationMonth?: string;
|
|
37
|
+
expirationYear?: string;
|
|
38
|
+
cardholderName?: string;
|
|
39
|
+
network?: string;
|
|
40
|
+
isNetworkTokenized?: boolean;
|
|
41
|
+
klarnaCustomerToken?: string;
|
|
42
|
+
|
|
43
|
+
sessionData?: IKlarnaSessionData;
|
|
44
|
+
externalPayerInfo?: IExternalPayerInfo;
|
|
45
|
+
shippingAddress?: IShippingAddress;
|
|
46
|
+
binData?: IBinData;
|
|
47
|
+
|
|
48
|
+
gocardlessMandateId?: string;
|
|
49
|
+
authorizationToken?: string;
|
|
50
|
+
hashedIdentifier?: string;
|
|
51
|
+
mcc?: string;
|
|
52
|
+
mnc?: string;
|
|
53
|
+
mx?: string;
|
|
54
|
+
currencyCode?: string;
|
|
55
|
+
productId?: string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface IKlarnaSessionData {
|
|
59
|
+
recurringDescription?: string;
|
|
60
|
+
purchaseCountry?: string;
|
|
61
|
+
purchaseCurrency?: string;
|
|
62
|
+
locale?: string;
|
|
63
|
+
orderAmount?: string;
|
|
64
|
+
orderLines?: IKlarnaSessionOrderLines[];
|
|
65
|
+
billingAddress?: IKlarnaBillingAddress;
|
|
66
|
+
tokenDetails?: IKlarnaSessionDataTokenDetails;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface IKlarnaSessionOrderLines {
|
|
70
|
+
type?: string;
|
|
71
|
+
name?: string;
|
|
72
|
+
quantity?: number;
|
|
73
|
+
unitPrice?: number;
|
|
74
|
+
totalAmount?: number;
|
|
75
|
+
totalDiscountAmount?: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface IKlarnaBillingAddress {
|
|
79
|
+
addressLine1?: string;
|
|
80
|
+
addressLine2?: string;
|
|
81
|
+
addressLine3?: string;
|
|
82
|
+
city?: string;
|
|
83
|
+
countryCode?: string;
|
|
84
|
+
email?: string;
|
|
85
|
+
firstName?: string;
|
|
86
|
+
lastName?: string;
|
|
87
|
+
phoneNumber?: string;
|
|
88
|
+
postalCode?: string;
|
|
89
|
+
state?: string;
|
|
90
|
+
title?: string;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface IKlarnaSessionDataTokenDetails {
|
|
94
|
+
brand?: string;
|
|
95
|
+
maskedNumber?: string;
|
|
96
|
+
type: string;
|
|
97
|
+
expiryDate?: string;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export interface IExternalPayerInfo {
|
|
101
|
+
externalPayerId?: string;
|
|
102
|
+
email?: string;
|
|
103
|
+
firstName?: string;
|
|
104
|
+
lastName?: string;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface IShippingAddress {
|
|
108
|
+
firstName?: string;
|
|
109
|
+
lastName?: string;
|
|
110
|
+
addressLine1?: string;
|
|
111
|
+
addressLine2?: string;
|
|
112
|
+
city?: string;
|
|
113
|
+
state?: string;
|
|
114
|
+
countryCode?: string;
|
|
115
|
+
postalCode?: string;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface IBinData {
|
|
119
|
+
network?: string;
|
|
120
|
+
issuerCountryCode?: string;
|
|
121
|
+
issuerName?: string;
|
|
122
|
+
issuerCurrencyCode?: string;
|
|
123
|
+
regionalRestriction?: string;
|
|
124
|
+
accountNumberType?: string;
|
|
125
|
+
accountFundingType?: string;
|
|
126
|
+
prepaidReloadableIndicator?: string;
|
|
127
|
+
productUsageType?: string;
|
|
128
|
+
productCode?: string;
|
|
129
|
+
productName?: string;
|
|
130
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { PrimerErrorHandler, PrimerPaymentCreationHandler, PrimerResumeHandler, PrimerTokenizationHandler } from "./Primer";
|
|
2
|
+
import type { PrimerCheckoutData } from "./PrimerCheckoutData";
|
|
3
|
+
import type { PrimerCheckoutPaymentMethodData } from "./PrimerCheckoutPaymentMethodData";
|
|
4
|
+
import type { PrimerClientSession } from "./PrimerClientSession";
|
|
5
|
+
import type { PrimerPaymentMethodTokenData } from "./PrimerPaymentMethodTokenData";
|
|
6
|
+
import type { PrimerError } from "./PrimerError";
|
|
7
|
+
import type { IPrimerTheme } from "./PrimerTheme";
|
|
8
|
+
|
|
9
|
+
export type PrimerSettings = IPrimerSettings;
|
|
10
|
+
|
|
11
|
+
interface IPrimerSettings {
|
|
12
|
+
paymentHandling?: 'AUTO' | 'MANUAL';
|
|
13
|
+
localeData?: IPrimerLocaleData;
|
|
14
|
+
paymentMethodOptions?: IPrimerPaymentMethodOptions;
|
|
15
|
+
uiOptions?: IPrimerUIOptions;
|
|
16
|
+
debugOptions?: IPrimerDebugOptions;
|
|
17
|
+
|
|
18
|
+
onBeforeClientSessionUpdate?: () => void;
|
|
19
|
+
onClientSessionUpdate?: (clientSession: PrimerClientSession) => void;
|
|
20
|
+
onBeforePaymentCreate?: (checkoutPaymentMethodData: PrimerCheckoutPaymentMethodData, handler: PrimerPaymentCreationHandler) => void;
|
|
21
|
+
onCheckoutComplete?: (checkoutData: PrimerCheckoutData) => void;
|
|
22
|
+
onTokenizeSuccess?: (paymentMethodTokenData: PrimerPaymentMethodTokenData, handler: PrimerTokenizationHandler) => void;
|
|
23
|
+
onResumeSuccess?: (resumeToken: string, handler: PrimerResumeHandler) => void;
|
|
24
|
+
onError?: (error: PrimerError, checkoutData: PrimerCheckoutData | null, handler: PrimerErrorHandler) => void;
|
|
25
|
+
onDismiss?: () => void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
//----------------------------------------
|
|
29
|
+
|
|
30
|
+
interface IPrimerLocaleData {
|
|
31
|
+
languageCode?: string
|
|
32
|
+
localeCode?: string
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//----------------------------------------
|
|
36
|
+
|
|
37
|
+
interface IPrimerPaymentMethodOptions {
|
|
38
|
+
iOS?: {
|
|
39
|
+
urlScheme?: string;
|
|
40
|
+
}
|
|
41
|
+
android?: {
|
|
42
|
+
redirectScheme?: string;
|
|
43
|
+
},
|
|
44
|
+
apayaOptions?: IPrimerApayaOptions;
|
|
45
|
+
applePayOptions?: IPrimerApplePayOptions;
|
|
46
|
+
cardPaymentOptions?: IPrimerCardPaymentOptions;
|
|
47
|
+
goCardlessOptions?: IPrimerGoCardlessOptions;
|
|
48
|
+
googlePayOptions?: IPrimerGooglePayOptions;
|
|
49
|
+
klarnaOptions?: IPrimerKlarnaOptions;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
interface IPrimerApayaOptions {
|
|
53
|
+
webViewTitle: string;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
interface IPrimerApplePayOptions {
|
|
57
|
+
merchantIdentifier: string;
|
|
58
|
+
merchantName: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
interface IPrimerCardPaymentOptions {
|
|
62
|
+
is3DSOnVaultingEnabled: boolean;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
interface IPrimerGoCardlessOptions {
|
|
66
|
+
businessName?: string;
|
|
67
|
+
businessAddress?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
interface IPrimerGooglePayOptions {
|
|
71
|
+
merchantName?: string;
|
|
72
|
+
allowedCardNetworks?: string[];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
interface IPrimerKlarnaOptions {
|
|
76
|
+
recurringPaymentDescription?: string;
|
|
77
|
+
webViewTitle?: string;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
//----------------------------------------
|
|
81
|
+
|
|
82
|
+
interface IPrimerUIOptions {
|
|
83
|
+
isInitScreenEnabled?: boolean;
|
|
84
|
+
isSuccessScreenEnabled?: boolean;
|
|
85
|
+
isErrorScreenEnabled?: boolean;
|
|
86
|
+
theme?: IPrimerTheme;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//----------------------------------------
|
|
90
|
+
|
|
91
|
+
interface IPrimerDebugOptions {
|
|
92
|
+
is3DSSanityCheckEnabled?: boolean;
|
|
93
|
+
}
|