@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,13 @@
|
|
|
1
|
+
import type { PrimerSettings } from 'src/models/primer-settings';
|
|
2
|
+
import type { PrimerHeadlessUniversalCheckoutStartResponse, PrimerHeadlessUniversalCheckoutCallbacks } from './types';
|
|
3
|
+
declare class PrimerHeadlessUniversalCheckoutClass {
|
|
4
|
+
constructor();
|
|
5
|
+
private configureListeners;
|
|
6
|
+
startWithClientToken(clientToken: string, settings: PrimerSettings & PrimerHeadlessUniversalCheckoutCallbacks): Promise<PrimerHeadlessUniversalCheckoutStartResponse>;
|
|
7
|
+
showPaymentMethod(paymentMethod: string): Promise<void>;
|
|
8
|
+
resumeWithClientToken(resumeToken: string): void;
|
|
9
|
+
getAssetForPaymentMethod(paymentMethodType: string, assetType: 'logo' | 'icon'): Promise<string>;
|
|
10
|
+
getAssetForCardNetwork(cardNetwork: string, assetType: 'logo' | 'icon'): Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
declare const PrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutClass;
|
|
13
|
+
export default PrimerHeadlessUniversalCheckout;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface PrimerHeadlessUniversalCheckoutStartResponse {
|
|
2
|
+
paymentMethodTypes: string[];
|
|
3
|
+
}
|
|
4
|
+
export interface PrimerError {
|
|
5
|
+
errorId: string;
|
|
6
|
+
description: string;
|
|
7
|
+
recoverySuggestion?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface PrimerHeadlessUniversalCheckoutCallbacks {
|
|
10
|
+
onPreparationStarted?: () => void;
|
|
11
|
+
onPaymentMethodPresented?: () => void;
|
|
12
|
+
onTokenizeStart?: () => void;
|
|
13
|
+
onTokenizeSuccess?: (paymentMethod: any) => void;
|
|
14
|
+
onResumeSuccess?: (resumeToken: string) => void;
|
|
15
|
+
onFailure?: (error: PrimerError) => void;
|
|
16
|
+
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import PrimerHeadlessUniversalCheckout from './headless_checkout/PrimerHeadlessUniversalCheckout';
|
|
1
2
|
import type { IPrimer } from './models/primer';
|
|
3
|
+
export * from './PrimerInput';
|
|
2
4
|
declare const Primer: IPrimer;
|
|
3
|
-
export { Primer };
|
|
5
|
+
export { Primer, PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout };
|
package/package.json
CHANGED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { PrimerHeadlessUniversalCheckoutCardFormUIManager } from './RNTPrimerHeadlessUniversalCheckoutCardFormUIManager';
|
|
2
|
+
import React, { useEffect, useRef } from 'react';
|
|
3
|
+
import { NativeModules, requireNativeComponent, ViewProps } from 'react-native';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
// PrimerCardNumberEditText
|
|
7
|
+
export const PrimerCardNumberEditTextRaw = requireNativeComponent<{}>(
|
|
8
|
+
'PrimerCardNumberEditText'
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
type PrimerCardNumberEditTextProps = ViewProps;
|
|
12
|
+
|
|
13
|
+
const { PrimerRN } = NativeModules;
|
|
14
|
+
|
|
15
|
+
export const PrimerCardNumberEditText: React.FC<PrimerCardNumberEditTextProps> = (props) => {
|
|
16
|
+
const ref = useRef(React.createRef<any>());
|
|
17
|
+
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const tag = ref.current.current._nativeTag;
|
|
20
|
+
PrimerHeadlessUniversalCheckoutCardFormUIManager.addInput(tag);
|
|
21
|
+
return () => PrimerRN.removeInput(tag);
|
|
22
|
+
}, []);
|
|
23
|
+
|
|
24
|
+
const rawComponent = (
|
|
25
|
+
<PrimerCardNumberEditTextRaw ref={ref.current} {...props} />
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
return rawComponent;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// PrimerCardholderNameEditText
|
|
32
|
+
export const PrimerCardholderNameEditTextRaw = requireNativeComponent<{}>(
|
|
33
|
+
'PrimerCardholderNameEditText'
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
type PrimerCardholderNameEditTextProps = ViewProps;
|
|
37
|
+
|
|
38
|
+
export const PrimerCardholderNameEditText: React.FC<PrimerCardholderNameEditTextProps> = (
|
|
39
|
+
props
|
|
40
|
+
) => {
|
|
41
|
+
const ref = useRef(React.createRef<any>());
|
|
42
|
+
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
const tag = ref.current.current._nativeTag;
|
|
45
|
+
PrimerRN.addInput(tag);
|
|
46
|
+
return () => PrimerRN.removeInput(tag);
|
|
47
|
+
}, []);
|
|
48
|
+
return <PrimerCardholderNameEditTextRaw ref={ref.current} {...props} />;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// PrimerExpiryEditText
|
|
52
|
+
export const PrimerExpiryEditTextRaw = requireNativeComponent<{}>(
|
|
53
|
+
'PrimerExpiryEditText'
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
type PrimerExpiryEditTextProps = ViewProps;
|
|
57
|
+
|
|
58
|
+
export const PrimerExpiryEditText: React.FC<PrimerExpiryEditTextProps> = (
|
|
59
|
+
props
|
|
60
|
+
) => {
|
|
61
|
+
return <PrimerExpiryEditTextRaw {...props} />;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// cvv
|
|
65
|
+
export const PrimerCvvEditTextRaw = requireNativeComponent<{}>(
|
|
66
|
+
'PrimerCvvEditText'
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
type PrimerCvvEditTextProps = ViewProps;
|
|
70
|
+
|
|
71
|
+
export const PrimerCvvEditText: React.FC<PrimerCvvEditTextProps> = (props) => {
|
|
72
|
+
return <PrimerCvvEditTextRaw {...props} />;
|
|
73
|
+
};
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { NativeEventEmitter, NativeModules } from 'react-native';
|
|
2
|
+
import type { PrimerSettings } from 'src/models/primer-settings';
|
|
3
|
+
import RNPrimer from '../RNPrimer';
|
|
4
|
+
import type { PrimerHeadlessUniversalCheckoutCallbacks } from './types';
|
|
5
|
+
|
|
6
|
+
const { PrimerHeadlessUniversalCheckout } = NativeModules;
|
|
7
|
+
|
|
8
|
+
const eventEmitter = new NativeEventEmitter(PrimerHeadlessUniversalCheckout);
|
|
9
|
+
|
|
10
|
+
type EventType =
|
|
11
|
+
| 'preparationStarted'
|
|
12
|
+
| 'paymentMethodPresented'
|
|
13
|
+
| 'tokenizationStarted'
|
|
14
|
+
| 'tokenizationSucceeded'
|
|
15
|
+
| 'resume'
|
|
16
|
+
| 'error';
|
|
17
|
+
|
|
18
|
+
let primerSettings: (PrimerSettings & PrimerHeadlessUniversalCheckoutCallbacks) | null = null;
|
|
19
|
+
|
|
20
|
+
const NativePrimerHeadlessUniversalCheckout = {
|
|
21
|
+
///////////////////////////////////////////
|
|
22
|
+
// Event Emitter
|
|
23
|
+
///////////////////////////////////////////
|
|
24
|
+
addListener: (eventType: EventType, listener: (...args: any[]) => any) => {
|
|
25
|
+
eventEmitter.addListener(eventType, listener);
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
removeListener: (eventType: EventType, listener: (...args: any[]) => any) => {
|
|
29
|
+
eventEmitter.removeListener(eventType, listener);
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
removeAllListenersForEvent(eventType: EventType) {
|
|
33
|
+
eventEmitter.removeAllListeners(eventType);
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
removeAllListeners() {
|
|
37
|
+
eventEmitter.removeAllListeners('preparationStarted');
|
|
38
|
+
eventEmitter.removeAllListeners('paymentMethodPresented');
|
|
39
|
+
eventEmitter.removeAllListeners('tokenizationStarted');
|
|
40
|
+
eventEmitter.removeAllListeners('tokenizationSucceeded');
|
|
41
|
+
eventEmitter.removeAllListeners('resume');
|
|
42
|
+
eventEmitter.removeAllListeners('error');
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
///////////////////////////////////////////
|
|
46
|
+
// Native API
|
|
47
|
+
///////////////////////////////////////////
|
|
48
|
+
getAssetForPaymentMethod: (
|
|
49
|
+
paymentMethodType: string,
|
|
50
|
+
assetType: 'logo' | 'icon'
|
|
51
|
+
): Promise<string> => {
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
try {
|
|
54
|
+
PrimerHeadlessUniversalCheckout.getAssetForPaymentMethodType(
|
|
55
|
+
paymentMethodType,
|
|
56
|
+
assetType,
|
|
57
|
+
(err: Error) => {
|
|
58
|
+
reject(err);
|
|
59
|
+
},
|
|
60
|
+
(url: string) => {
|
|
61
|
+
resolve(url);
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
} catch (e) {
|
|
65
|
+
reject(e);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
getAssetForCardNetwork: (
|
|
71
|
+
cardNetwork: string,
|
|
72
|
+
assetType: 'logo' | 'icon'
|
|
73
|
+
): Promise<string> => {
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
try {
|
|
76
|
+
PrimerHeadlessUniversalCheckout.getAssetForPaymentMethodType(
|
|
77
|
+
cardNetwork,
|
|
78
|
+
assetType,
|
|
79
|
+
(err: Error) => {
|
|
80
|
+
reject(err);
|
|
81
|
+
},
|
|
82
|
+
(url: string) => {
|
|
83
|
+
resolve(url);
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
} catch (e) {
|
|
87
|
+
reject(e);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
startWithClientToken(clientToken: string, settings: any): Promise<any> {
|
|
93
|
+
primerSettings = settings;
|
|
94
|
+
|
|
95
|
+
return new Promise((resolve, reject) => {
|
|
96
|
+
PrimerHeadlessUniversalCheckout.startWithClientToken(
|
|
97
|
+
clientToken,
|
|
98
|
+
JSON.stringify(settings),
|
|
99
|
+
(err: Error) => {
|
|
100
|
+
console.error(err);
|
|
101
|
+
reject(err);
|
|
102
|
+
},
|
|
103
|
+
(paymentMethodTypes: string[]) => {
|
|
104
|
+
resolve({ paymentMethodTypes });
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
});
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
showPaymentMethod: async (paymentMethod: string) => {
|
|
111
|
+
if (primerSettings) {
|
|
112
|
+
let implementedRNCallbacks: any = {
|
|
113
|
+
isTokenAddedToVaultImplemented: false,
|
|
114
|
+
isOnResumeSuccessImplemented: (primerSettings.onResumeSuccess !== undefined),
|
|
115
|
+
isOnResumeErrorImplemented: (primerSettings.onFailure !== undefined),
|
|
116
|
+
isOnCheckoutDismissedImplemented: false,
|
|
117
|
+
isCheckoutFailedImplemented: (primerSettings.onFailure !== undefined),
|
|
118
|
+
isClientSessionActionsImplemented: false
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
await RNPrimer.setImplementedRNCallbacks(implementedRNCallbacks);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
PrimerHeadlessUniversalCheckout.showPaymentMethod(paymentMethod);
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
resumeWithClientToken(resumeToken: string) {
|
|
128
|
+
PrimerHeadlessUniversalCheckout.resumeWithClientToken(resumeToken);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
export default NativePrimerHeadlessUniversalCheckout;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { PaymentInstrumentToken } from 'src/models/payment-instrument-token';
|
|
2
|
+
import type { PrimerError } from 'src/models/primer-error';
|
|
3
|
+
import type { PrimerSettings } from 'src/models/primer-settings';
|
|
4
|
+
import NativePrimerHeadlessUniversalCheckout from './NativePrimerHeadlessUniversalCheckout';
|
|
5
|
+
import type {
|
|
6
|
+
PrimerHeadlessUniversalCheckoutStartResponse,
|
|
7
|
+
PrimerHeadlessUniversalCheckoutCallbacks,
|
|
8
|
+
} from './types';
|
|
9
|
+
|
|
10
|
+
let callbacks: PrimerHeadlessUniversalCheckoutCallbacks | undefined;
|
|
11
|
+
|
|
12
|
+
class PrimerHeadlessUniversalCheckoutClass {
|
|
13
|
+
|
|
14
|
+
///////////////////////////////////////////
|
|
15
|
+
// Init
|
|
16
|
+
///////////////////////////////////////////
|
|
17
|
+
constructor() {
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private configureListeners() {
|
|
22
|
+
NativePrimerHeadlessUniversalCheckout.removeAllListeners();
|
|
23
|
+
|
|
24
|
+
NativePrimerHeadlessUniversalCheckout.addListener(
|
|
25
|
+
'preparationStarted',
|
|
26
|
+
() => {
|
|
27
|
+
console.log('preparationStarted');
|
|
28
|
+
callbacks?.onPreparationStarted?.();
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
NativePrimerHeadlessUniversalCheckout.addListener(
|
|
33
|
+
'paymentMethodPresented',
|
|
34
|
+
() => {
|
|
35
|
+
console.log('paymentMethodPresented');
|
|
36
|
+
callbacks?.onPaymentMethodPresented?.();
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
NativePrimerHeadlessUniversalCheckout.addListener(
|
|
41
|
+
'tokenizationStarted',
|
|
42
|
+
() => {
|
|
43
|
+
console.log('tokenizationStarted');
|
|
44
|
+
callbacks?.onTokenizeStart?.();
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
NativePrimerHeadlessUniversalCheckout.addListener(
|
|
49
|
+
'tokenizationSucceeded',
|
|
50
|
+
(data) => {
|
|
51
|
+
console.log('tokenizationSucceeded', data);
|
|
52
|
+
|
|
53
|
+
if (data.paymentMethodToken) {
|
|
54
|
+
const paymentMethodTokenObj: PaymentInstrumentToken = JSON.parse(
|
|
55
|
+
data.paymentMethodToken
|
|
56
|
+
);
|
|
57
|
+
callbacks?.onTokenizeSuccess?.(paymentMethodTokenObj);
|
|
58
|
+
} else {
|
|
59
|
+
const err: PrimerError = {
|
|
60
|
+
name: 'ParseJsonFailed',
|
|
61
|
+
description: 'Failed to parse payment method token',
|
|
62
|
+
};
|
|
63
|
+
//@ts-ignore
|
|
64
|
+
callbacks?.onFailure?.(err);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
NativePrimerHeadlessUniversalCheckout.addListener('resume', (data) => {
|
|
70
|
+
console.log('resume', data);
|
|
71
|
+
callbacks?.onResumeSuccess?.(data.resumeToken);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
NativePrimerHeadlessUniversalCheckout.addListener('error', (data) => {
|
|
75
|
+
console.log('error', data);
|
|
76
|
+
callbacks?.onFailure?.(data.error);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
///////////////////////////////////////////
|
|
81
|
+
// API
|
|
82
|
+
///////////////////////////////////////////
|
|
83
|
+
startWithClientToken(
|
|
84
|
+
clientToken: string,
|
|
85
|
+
settings: PrimerSettings & PrimerHeadlessUniversalCheckoutCallbacks
|
|
86
|
+
): Promise<PrimerHeadlessUniversalCheckoutStartResponse> {
|
|
87
|
+
// Copy callback
|
|
88
|
+
callbacks = {
|
|
89
|
+
onPreparationStarted: settings.onPreparationStarted,
|
|
90
|
+
onPaymentMethodPresented: settings.onPaymentMethodPresented,
|
|
91
|
+
onTokenizeStart: settings.onTokenizeStart,
|
|
92
|
+
onTokenizeSuccess: settings.onTokenizeSuccess,
|
|
93
|
+
onResumeSuccess: settings.onResumeSuccess,
|
|
94
|
+
onFailure: settings.onFailure,
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
return NativePrimerHeadlessUniversalCheckout.startWithClientToken(
|
|
98
|
+
clientToken,
|
|
99
|
+
settings
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
showPaymentMethod(paymentMethod: string) {
|
|
104
|
+
this.configureListeners();
|
|
105
|
+
|
|
106
|
+
return NativePrimerHeadlessUniversalCheckout.showPaymentMethod(
|
|
107
|
+
paymentMethod
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
resumeWithClientToken(resumeToken: string) {
|
|
112
|
+
return NativePrimerHeadlessUniversalCheckout.resumeWithClientToken(
|
|
113
|
+
resumeToken
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
getAssetForPaymentMethod(
|
|
118
|
+
paymentMethodType: string,
|
|
119
|
+
assetType: 'logo' | 'icon'
|
|
120
|
+
): Promise<string> {
|
|
121
|
+
return NativePrimerHeadlessUniversalCheckout.getAssetForPaymentMethod(
|
|
122
|
+
paymentMethodType,
|
|
123
|
+
assetType
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
getAssetForCardNetwork(
|
|
128
|
+
cardNetwork: string,
|
|
129
|
+
assetType: 'logo' | 'icon'
|
|
130
|
+
): Promise<string> {
|
|
131
|
+
return NativePrimerHeadlessUniversalCheckout.getAssetForCardNetwork(
|
|
132
|
+
cardNetwork,
|
|
133
|
+
assetType
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const PrimerHeadlessUniversalCheckout = new PrimerHeadlessUniversalCheckoutClass();
|
|
139
|
+
|
|
140
|
+
export default PrimerHeadlessUniversalCheckout;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface PrimerHeadlessUniversalCheckoutStartResponse {
|
|
2
|
+
paymentMethodTypes: string[];
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export interface PrimerError {
|
|
6
|
+
errorId: string;
|
|
7
|
+
description: string;
|
|
8
|
+
recoverySuggestion?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface PrimerHeadlessUniversalCheckoutCallbacks {
|
|
12
|
+
onPreparationStarted?: () => void;
|
|
13
|
+
onPaymentMethodPresented?: () => void;
|
|
14
|
+
onTokenizeStart?: () => void;
|
|
15
|
+
onTokenizeSuccess?: (paymentMethod: any) => void;
|
|
16
|
+
onResumeSuccess?: (resumeToken: string) => void;
|
|
17
|
+
onFailure?: (error: PrimerError) => void;
|
|
18
|
+
}
|
package/src/index.tsx
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import PrimerHeadlessUniversalCheckout from './headless_checkout/PrimerHeadlessUniversalCheckout';
|
|
1
2
|
import type { IPrimer } from './models/primer';
|
|
2
3
|
import { PrimerNativeMapping } from './Primer';
|
|
3
|
-
|
|
4
|
+
export * from './PrimerInput';
|
|
4
5
|
|
|
5
6
|
const Primer: IPrimer = PrimerNativeMapping;
|
|
6
7
|
|
|
7
|
-
export { Primer };
|
|
8
|
+
export { Primer, PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout };
|