@primer-io/react-native 0.12.4 → 0.13.0-beta.2
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/src/main/java/com/primerioreactnative/PrimerCardNumberEditTextManager.kt +83 -0
- package/android/src/main/java/com/primerioreactnative/PrimerHeadlessUniversalCheckout.kt +201 -0
- package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +3 -3
- 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/datamodels/PrimerSettingsRN.kt +3 -4
- 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/ios/{PrimerRN+PrimerDelegate.swift → Core/PrimerRN+PrimerDelegate.swift} +4 -3
- package/ios/{ReactNative.m → Core/PrimerRN.m} +1 -1
- package/ios/{PrimerRN.swift → Core/PrimerRN.swift} +26 -24
- package/ios/{ReactNative-Bridging-Header.h → Core/ReactNative-Bridging-Header.h} +2 -0
- package/ios/DataModels/PrimerErrorRN.swift +32 -2
- package/ios/DataModels/PrimerSettingsRN.swift +0 -6
- 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 +117 -0
- package/lib/commonjs/Primer.js +2 -1
- package/lib/commonjs/Primer.js.map +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 +73 -0
- package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +119 -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 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/Primer.js +1 -1
- package/lib/module/Primer.js.map +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 +64 -0
- package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +1 -0
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +104 -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 +3 -1
- package/lib/module/index.js.map +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 +10 -0
- package/lib/typescript/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +14 -0
- package/lib/typescript/headless_checkout/types.d.ts +16 -0
- package/lib/typescript/index.d.ts +3 -1
- package/lib/typescript/models/primer-settings.d.ts +1 -2
- package/package.json +1 -1
- package/primer-io-react-native.podspec +1 -1
- package/src/Primer.ts +2 -0
- package/src/PrimerInput.tsx +73 -0
- package/src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tsx +2 -0
- package/src/headless_checkout/NativePrimerHeadlessUniversalCheckout.ts +94 -0
- package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +136 -0
- package/src/headless_checkout/types.ts +18 -0
- package/src/index.tsx +3 -1
- package/src/models/primer-settings.ts +1 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["PrimerHeadlessUniversalCheckout.ts"],"names":["NativePrimerHeadlessUniversalCheckout","PrimerHeadlessUniversalCheckoutClass","constructor","callbacks","undefined","configureListeners","addListener","console","log","onPreparationStarted","onPaymentMethodPresented","onTokenizeStart","data","paymentMethodToken","paymentMethodTokenObj","JSON","parse","onTokenizeSuccess","err","name","description","onFailure","onResumeSuccess","resumeToken","error","startWithClientToken","clientToken","settings","showPaymentMethod","paymentMethod","resumeWithClientToken","getAssetForPaymentMethod","paymentMethodType","assetType","getAssetForCardNetwork","cardNetwork","PrimerHeadlessUniversalCheckout"],"mappings":"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","sourcesContent":["import type { PaymentInstrumentToken } from 'src/models/payment-instrument-token';\nimport type { PrimerError } from 'src/models/primer-error';\nimport type { PrimerSettings } from 'src/models/primer-settings';\nimport NativePrimerHeadlessUniversalCheckout from './NativePrimerHeadlessUniversalCheckout';\nimport type {\n PrimerHeadlessUniversalCheckoutStartResponse,\n PrimerHeadlessUniversalCheckoutCallbacks,\n} from './types';\n\nclass PrimerHeadlessUniversalCheckoutClass {\n private callbacks: PrimerHeadlessUniversalCheckoutCallbacks | undefined;\n\n ///////////////////////////////////////////\n // Init\n ///////////////////////////////////////////\n constructor() {\n this.callbacks = undefined;\n this.configureListeners();\n }\n\n private configureListeners() {\n NativePrimerHeadlessUniversalCheckout.addListener(\n 'preparationStarted',\n () => {\n console.log('preparationStarted');\n this.callbacks?.onPreparationStarted?.();\n }\n );\n\n NativePrimerHeadlessUniversalCheckout.addListener(\n 'paymentMethodPresented',\n () => {\n console.log('paymentMethodPresented');\n this.callbacks?.onPaymentMethodPresented?.();\n }\n );\n\n NativePrimerHeadlessUniversalCheckout.addListener(\n 'tokenizationStarted',\n () => {\n console.log('tokenizationStarted');\n this.callbacks?.onTokenizeStart?.();\n }\n );\n\n NativePrimerHeadlessUniversalCheckout.addListener(\n 'tokenizationSucceeded',\n (data) => {\n console.log('tokenizationSucceeded', data);\n\n if (data.paymentMethodToken) {\n const paymentMethodTokenObj: PaymentInstrumentToken = JSON.parse(\n data.paymentMethodToken\n );\n this.callbacks?.onTokenizeSuccess?.(paymentMethodTokenObj);\n } else {\n const err: PrimerError = {\n name: 'ParseJsonFailed',\n description: 'Failed to parse payment method token',\n };\n //@ts-ignore\n this.callbacks?.onFailure?.(err);\n }\n }\n );\n\n NativePrimerHeadlessUniversalCheckout.addListener('resume', (data) => {\n console.log('resume', data);\n this.callbacks?.onResumeSuccess?.(data.resumeToken);\n });\n\n NativePrimerHeadlessUniversalCheckout.addListener('error', (data) => {\n console.log('error', data);\n this.callbacks?.onFailure?.(data.error);\n });\n }\n\n ///////////////////////////////////////////\n // API\n ///////////////////////////////////////////\n startWithClientToken(\n clientToken: string,\n settings: PrimerSettings & PrimerHeadlessUniversalCheckoutCallbacks\n ): Promise<PrimerHeadlessUniversalCheckoutStartResponse> {\n // Copy callback\n this.callbacks = {\n onPreparationStarted: settings.onPreparationStarted,\n onPaymentMethodPresented: settings.onPaymentMethodPresented,\n onTokenizeStart: settings.onTokenizeStart,\n onTokenizeSuccess: settings.onTokenizeSuccess,\n onResumeSuccess: settings.onResumeSuccess,\n onFailure: settings.onFailure,\n };\n\n return NativePrimerHeadlessUniversalCheckout.startWithClientToken(\n clientToken,\n settings\n );\n }\n\n showPaymentMethod(paymentMethod: string) {\n return NativePrimerHeadlessUniversalCheckout.showPaymentMethod(\n paymentMethod\n );\n }\n\n resumeWithClientToken(resumeToken: string) {\n return NativePrimerHeadlessUniversalCheckout.resumeWithClientToken(\n resumeToken\n );\n }\n\n getAssetForPaymentMethod(\n paymentMethodType: string,\n assetType: 'logo' | 'icon'\n ): Promise<string> {\n return NativePrimerHeadlessUniversalCheckout.getAssetForPaymentMethod(\n paymentMethodType,\n assetType\n );\n }\n\n getAssetForCardNetwork(\n cardNetwork: string,\n assetType: 'logo' | 'icon'\n ): Promise<string> {\n return NativePrimerHeadlessUniversalCheckout.getAssetForCardNetwork(\n cardNetwork,\n assetType\n );\n }\n}\n\nconst PrimerHeadlessUniversalCheckout = new PrimerHeadlessUniversalCheckoutClass();\n\nexport default PrimerHeadlessUniversalCheckout;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import PrimerHeadlessUniversalCheckout from './headless_checkout/PrimerHeadlessUniversalCheckout';
|
|
1
2
|
import { PrimerNativeMapping } from './Primer';
|
|
3
|
+
export * from './PrimerInput';
|
|
2
4
|
const Primer = PrimerNativeMapping;
|
|
3
|
-
export { Primer };
|
|
5
|
+
export { Primer, PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout };
|
|
4
6
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["PrimerNativeMapping","Primer"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["PrimerHeadlessUniversalCheckout","PrimerNativeMapping","Primer","HeadlessUniversalCheckout"],"mappings":"AAAA,OAAOA,+BAAP,MAA4C,qDAA5C;AAEA,SAASC,mBAAT,QAAoC,UAApC;AACA,cAAc,eAAd;AAEA,MAAMC,MAAe,GAAGD,mBAAxB;AAEA,SAASC,MAAT,EAAiBF,+BAA+B,IAAIG,yBAApD","sourcesContent":["import PrimerHeadlessUniversalCheckout from './headless_checkout/PrimerHeadlessUniversalCheckout';\nimport type { IPrimer } from './models/primer';\nimport { PrimerNativeMapping } from './Primer';\nexport * from './PrimerInput';\n\nconst Primer: IPrimer = PrimerNativeMapping;\n\nexport { Primer, PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout };\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ViewProps } from 'react-native';
|
|
3
|
+
export declare const PrimerCardNumberEditTextRaw: import("react-native").HostComponent<{}>;
|
|
4
|
+
declare type PrimerCardNumberEditTextProps = ViewProps;
|
|
5
|
+
export declare const PrimerCardNumberEditText: React.FC<PrimerCardNumberEditTextProps>;
|
|
6
|
+
export declare const PrimerCardholderNameEditTextRaw: import("react-native").HostComponent<{}>;
|
|
7
|
+
declare type PrimerCardholderNameEditTextProps = ViewProps;
|
|
8
|
+
export declare const PrimerCardholderNameEditText: React.FC<PrimerCardholderNameEditTextProps>;
|
|
9
|
+
export declare const PrimerExpiryEditTextRaw: import("react-native").HostComponent<{}>;
|
|
10
|
+
declare type PrimerExpiryEditTextProps = ViewProps;
|
|
11
|
+
export declare const PrimerExpiryEditText: React.FC<PrimerExpiryEditTextProps>;
|
|
12
|
+
export declare const PrimerCvvEditTextRaw: import("react-native").HostComponent<{}>;
|
|
13
|
+
declare type PrimerCvvEditTextProps = ViewProps;
|
|
14
|
+
export declare const PrimerCvvEditText: React.FC<PrimerCvvEditTextProps>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PrimerHeadlessUniversalCheckoutCardFormUIManager: any;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
declare type EventType = 'preparationStarted' | 'paymentMethodPresented' | 'tokenizationStarted' | 'tokenizationSucceeded' | 'resume' | 'error';
|
|
2
|
+
declare const NativePrimerHeadlessUniversalCheckout: {
|
|
3
|
+
addListener: (eventType: EventType, listener: (...args: any[]) => any) => void;
|
|
4
|
+
getAssetForPaymentMethod: (paymentMethodType: string, assetType: 'logo' | 'icon') => Promise<string>;
|
|
5
|
+
getAssetForCardNetwork: (cardNetwork: string, assetType: 'logo' | 'icon') => Promise<string>;
|
|
6
|
+
startWithClientToken(clientToken: string, settings: any): Promise<any>;
|
|
7
|
+
showPaymentMethod: (paymentMethod: string) => any;
|
|
8
|
+
resumeWithClientToken(resumeToken: string): void;
|
|
9
|
+
};
|
|
10
|
+
export default NativePrimerHeadlessUniversalCheckout;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PrimerSettings } from 'src/models/primer-settings';
|
|
2
|
+
import type { PrimerHeadlessUniversalCheckoutStartResponse, PrimerHeadlessUniversalCheckoutCallbacks } from './types';
|
|
3
|
+
declare class PrimerHeadlessUniversalCheckoutClass {
|
|
4
|
+
private callbacks;
|
|
5
|
+
constructor();
|
|
6
|
+
private configureListeners;
|
|
7
|
+
startWithClientToken(clientToken: string, settings: PrimerSettings & PrimerHeadlessUniversalCheckoutCallbacks): Promise<PrimerHeadlessUniversalCheckoutStartResponse>;
|
|
8
|
+
showPaymentMethod(paymentMethod: string): any;
|
|
9
|
+
resumeWithClientToken(resumeToken: string): void;
|
|
10
|
+
getAssetForPaymentMethod(paymentMethodType: string, assetType: 'logo' | 'icon'): Promise<string>;
|
|
11
|
+
getAssetForCardNetwork(cardNetwork: string, assetType: 'logo' | 'icon'): Promise<string>;
|
|
12
|
+
}
|
|
13
|
+
declare const PrimerHeadlessUniversalCheckout: PrimerHeadlessUniversalCheckoutClass;
|
|
14
|
+
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 };
|
|
@@ -40,8 +40,7 @@ interface IOptions {
|
|
|
40
40
|
isResultScreenEnabled?: boolean;
|
|
41
41
|
isLoadingScreenEnabled?: boolean;
|
|
42
42
|
isFullScreenEnabled?: boolean;
|
|
43
|
-
|
|
44
|
-
is3DSDevelopmentModeEnabled?: boolean;
|
|
43
|
+
isThreeDsEnabled?: boolean;
|
|
45
44
|
locale?: string;
|
|
46
45
|
ios?: IIosOptions;
|
|
47
46
|
android?: IAndroidOptions;
|
package/package.json
CHANGED
package/src/Primer.ts
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,94 @@
|
|
|
1
|
+
import { NativeEventEmitter, NativeModules } from 'react-native';
|
|
2
|
+
|
|
3
|
+
const { PrimerHeadlessUniversalCheckout } = NativeModules;
|
|
4
|
+
|
|
5
|
+
const eventEmitter = new NativeEventEmitter(PrimerHeadlessUniversalCheckout);
|
|
6
|
+
|
|
7
|
+
type EventType =
|
|
8
|
+
| 'preparationStarted'
|
|
9
|
+
| 'paymentMethodPresented'
|
|
10
|
+
| 'tokenizationStarted'
|
|
11
|
+
| 'tokenizationSucceeded'
|
|
12
|
+
| 'resume'
|
|
13
|
+
| 'error';
|
|
14
|
+
|
|
15
|
+
const NativePrimerHeadlessUniversalCheckout = {
|
|
16
|
+
///////////////////////////////////////////
|
|
17
|
+
// Event Emitter
|
|
18
|
+
///////////////////////////////////////////
|
|
19
|
+
addListener: (eventType: EventType, listener: (...args: any[]) => any) => {
|
|
20
|
+
eventEmitter.addListener(eventType, listener);
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
///////////////////////////////////////////
|
|
24
|
+
// Native API
|
|
25
|
+
///////////////////////////////////////////
|
|
26
|
+
getAssetForPaymentMethod: (
|
|
27
|
+
paymentMethodType: string,
|
|
28
|
+
assetType: 'logo' | 'icon'
|
|
29
|
+
): Promise<string> => {
|
|
30
|
+
return new Promise((resolve, reject) => {
|
|
31
|
+
try {
|
|
32
|
+
PrimerHeadlessUniversalCheckout.getAssetForPaymentMethodType(
|
|
33
|
+
paymentMethodType,
|
|
34
|
+
assetType,
|
|
35
|
+
(err: Error) => {
|
|
36
|
+
reject(err);
|
|
37
|
+
},
|
|
38
|
+
(url: string) => {
|
|
39
|
+
resolve(url);
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
} catch (e) {
|
|
43
|
+
reject(e);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
getAssetForCardNetwork: (
|
|
49
|
+
cardNetwork: string,
|
|
50
|
+
assetType: 'logo' | 'icon'
|
|
51
|
+
): Promise<string> => {
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
try {
|
|
54
|
+
PrimerHeadlessUniversalCheckout.getAssetForPaymentMethodType(
|
|
55
|
+
cardNetwork,
|
|
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
|
+
startWithClientToken(clientToken: string, settings: any): Promise<any> {
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
PrimerHeadlessUniversalCheckout.startWithClientToken(
|
|
73
|
+
clientToken,
|
|
74
|
+
JSON.stringify(settings),
|
|
75
|
+
(err: Error) => {
|
|
76
|
+
console.error(err);
|
|
77
|
+
reject(err);
|
|
78
|
+
},
|
|
79
|
+
(paymentMethodTypes: string[]) => {
|
|
80
|
+
resolve({ paymentMethodTypes });
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
|
|
86
|
+
showPaymentMethod: (paymentMethod: string) =>
|
|
87
|
+
PrimerHeadlessUniversalCheckout.showPaymentMethod(paymentMethod),
|
|
88
|
+
|
|
89
|
+
resumeWithClientToken(resumeToken: string) {
|
|
90
|
+
PrimerHeadlessUniversalCheckout.resumeWithClientToken(resumeToken);
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export default NativePrimerHeadlessUniversalCheckout;
|
|
@@ -0,0 +1,136 @@
|
|
|
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
|
+
class PrimerHeadlessUniversalCheckoutClass {
|
|
11
|
+
private callbacks: PrimerHeadlessUniversalCheckoutCallbacks | undefined;
|
|
12
|
+
|
|
13
|
+
///////////////////////////////////////////
|
|
14
|
+
// Init
|
|
15
|
+
///////////////////////////////////////////
|
|
16
|
+
constructor() {
|
|
17
|
+
this.callbacks = undefined;
|
|
18
|
+
this.configureListeners();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private configureListeners() {
|
|
22
|
+
NativePrimerHeadlessUniversalCheckout.addListener(
|
|
23
|
+
'preparationStarted',
|
|
24
|
+
() => {
|
|
25
|
+
console.log('preparationStarted');
|
|
26
|
+
this.callbacks?.onPreparationStarted?.();
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
NativePrimerHeadlessUniversalCheckout.addListener(
|
|
31
|
+
'paymentMethodPresented',
|
|
32
|
+
() => {
|
|
33
|
+
console.log('paymentMethodPresented');
|
|
34
|
+
this.callbacks?.onPaymentMethodPresented?.();
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
NativePrimerHeadlessUniversalCheckout.addListener(
|
|
39
|
+
'tokenizationStarted',
|
|
40
|
+
() => {
|
|
41
|
+
console.log('tokenizationStarted');
|
|
42
|
+
this.callbacks?.onTokenizeStart?.();
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
NativePrimerHeadlessUniversalCheckout.addListener(
|
|
47
|
+
'tokenizationSucceeded',
|
|
48
|
+
(data) => {
|
|
49
|
+
console.log('tokenizationSucceeded', data);
|
|
50
|
+
|
|
51
|
+
if (data.paymentMethodToken) {
|
|
52
|
+
const paymentMethodTokenObj: PaymentInstrumentToken = JSON.parse(
|
|
53
|
+
data.paymentMethodToken
|
|
54
|
+
);
|
|
55
|
+
this.callbacks?.onTokenizeSuccess?.(paymentMethodTokenObj);
|
|
56
|
+
} else {
|
|
57
|
+
const err: PrimerError = {
|
|
58
|
+
name: 'ParseJsonFailed',
|
|
59
|
+
description: 'Failed to parse payment method token',
|
|
60
|
+
};
|
|
61
|
+
//@ts-ignore
|
|
62
|
+
this.callbacks?.onFailure?.(err);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
NativePrimerHeadlessUniversalCheckout.addListener('resume', (data) => {
|
|
68
|
+
console.log('resume', data);
|
|
69
|
+
this.callbacks?.onResumeSuccess?.(data.resumeToken);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
NativePrimerHeadlessUniversalCheckout.addListener('error', (data) => {
|
|
73
|
+
console.log('error', data);
|
|
74
|
+
this.callbacks?.onFailure?.(data.error);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
///////////////////////////////////////////
|
|
79
|
+
// API
|
|
80
|
+
///////////////////////////////////////////
|
|
81
|
+
startWithClientToken(
|
|
82
|
+
clientToken: string,
|
|
83
|
+
settings: PrimerSettings & PrimerHeadlessUniversalCheckoutCallbacks
|
|
84
|
+
): Promise<PrimerHeadlessUniversalCheckoutStartResponse> {
|
|
85
|
+
// Copy callback
|
|
86
|
+
this.callbacks = {
|
|
87
|
+
onPreparationStarted: settings.onPreparationStarted,
|
|
88
|
+
onPaymentMethodPresented: settings.onPaymentMethodPresented,
|
|
89
|
+
onTokenizeStart: settings.onTokenizeStart,
|
|
90
|
+
onTokenizeSuccess: settings.onTokenizeSuccess,
|
|
91
|
+
onResumeSuccess: settings.onResumeSuccess,
|
|
92
|
+
onFailure: settings.onFailure,
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
return NativePrimerHeadlessUniversalCheckout.startWithClientToken(
|
|
96
|
+
clientToken,
|
|
97
|
+
settings
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
showPaymentMethod(paymentMethod: string) {
|
|
102
|
+
return NativePrimerHeadlessUniversalCheckout.showPaymentMethod(
|
|
103
|
+
paymentMethod
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
resumeWithClientToken(resumeToken: string) {
|
|
108
|
+
return NativePrimerHeadlessUniversalCheckout.resumeWithClientToken(
|
|
109
|
+
resumeToken
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
getAssetForPaymentMethod(
|
|
114
|
+
paymentMethodType: string,
|
|
115
|
+
assetType: 'logo' | 'icon'
|
|
116
|
+
): Promise<string> {
|
|
117
|
+
return NativePrimerHeadlessUniversalCheckout.getAssetForPaymentMethod(
|
|
118
|
+
paymentMethodType,
|
|
119
|
+
assetType
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
getAssetForCardNetwork(
|
|
124
|
+
cardNetwork: string,
|
|
125
|
+
assetType: 'logo' | 'icon'
|
|
126
|
+
): Promise<string> {
|
|
127
|
+
return NativePrimerHeadlessUniversalCheckout.getAssetForCardNetwork(
|
|
128
|
+
cardNetwork,
|
|
129
|
+
assetType
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const PrimerHeadlessUniversalCheckout = new PrimerHeadlessUniversalCheckoutClass();
|
|
135
|
+
|
|
136
|
+
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,6 +1,8 @@
|
|
|
1
|
+
import PrimerHeadlessUniversalCheckout from './headless_checkout/PrimerHeadlessUniversalCheckout';
|
|
1
2
|
import type { IPrimer } from './models/primer';
|
|
2
3
|
import { PrimerNativeMapping } from './Primer';
|
|
4
|
+
export * from './PrimerInput';
|
|
3
5
|
|
|
4
6
|
const Primer: IPrimer = PrimerNativeMapping;
|
|
5
7
|
|
|
6
|
-
export { Primer };
|
|
8
|
+
export { Primer, PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout };
|
|
@@ -46,8 +46,7 @@ interface IOptions {
|
|
|
46
46
|
isResultScreenEnabled?: boolean;
|
|
47
47
|
isLoadingScreenEnabled?: boolean;
|
|
48
48
|
isFullScreenEnabled?: boolean;
|
|
49
|
-
|
|
50
|
-
is3DSDevelopmentModeEnabled?: boolean;
|
|
49
|
+
isThreeDsEnabled?: boolean;
|
|
51
50
|
locale?: string;
|
|
52
51
|
ios?: IIosOptions;
|
|
53
52
|
android?: IAndroidOptions;
|