@primer-io/react-native 0.12.1 → 0.13.0-beta.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.
Files changed (72) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/main/java/com/primerioreactnative/PrimerCardNumberEditTextManager.kt +83 -0
  3. package/android/src/main/java/com/primerioreactnative/PrimerHeadlessUniversalCheckout.kt +201 -0
  4. package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +3 -3
  5. package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +14 -3
  6. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +2 -0
  7. package/android/src/main/java/com/primerioreactnative/huc/assets/AssetsManager.kt +56 -0
  8. package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutEvent.kt +11 -0
  9. package/android/src/main/java/com/primerioreactnative/huc/extensions/Map.kt +10 -0
  10. package/ios/{PrimerRN+PrimerDelegate.swift → Core/PrimerRN+PrimerDelegate.swift} +4 -3
  11. package/ios/{ReactNative.m → Core/PrimerRN.m} +1 -1
  12. package/ios/{PrimerRN.swift → Core/PrimerRN.swift} +26 -24
  13. package/ios/{ReactNative-Bridging-Header.h → Core/ReactNative-Bridging-Header.h} +2 -0
  14. package/ios/DataModels/PrimerErrorRN.swift +32 -2
  15. package/ios/Headless Universal Checkout/RNTPrimerCardNumberInputElementManager.m +23 -0
  16. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.m +30 -0
  17. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +241 -0
  18. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.m +14 -0
  19. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.swift +117 -0
  20. package/ios/Pods/Manifest.lock +3 -0
  21. package/ios/Pods/Pods.xcodeproj/project.pbxproj +344 -0
  22. package/ios/Pods/Pods.xcodeproj/xcuserdata/aladintaleb.xcuserdatad/xcschemes/Pods-ReactNative.xcscheme +60 -0
  23. package/ios/Pods/Pods.xcodeproj/xcuserdata/aladintaleb.xcuserdatad/xcschemes/xcschememanagement.plist +16 -0
  24. package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-acknowledgements.markdown +3 -0
  25. package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-acknowledgements.plist +29 -0
  26. package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-dummy.m +5 -0
  27. package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative.debug.xcconfig +8 -0
  28. package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative.release.xcconfig +8 -0
  29. package/ios/ReactNative.xcworkspace/xcuserdata/aladintaleb.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  30. package/lib/commonjs/Primer.js +2 -1
  31. package/lib/commonjs/Primer.js.map +1 -1
  32. package/lib/commonjs/PrimerInput.js +80 -0
  33. package/lib/commonjs/PrimerInput.js.map +1 -0
  34. package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +14 -0
  35. package/lib/commonjs/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -0
  36. package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +73 -0
  37. package/lib/commonjs/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +1 -0
  38. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +119 -0
  39. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -0
  40. package/lib/commonjs/headless_checkout/types.js +2 -0
  41. package/lib/commonjs/headless_checkout/types.js.map +1 -0
  42. package/lib/commonjs/index.js +28 -0
  43. package/lib/commonjs/index.js.map +1 -1
  44. package/lib/module/Primer.js +1 -1
  45. package/lib/module/Primer.js.map +1 -1
  46. package/lib/module/PrimerInput.js +46 -0
  47. package/lib/module/PrimerInput.js.map +1 -0
  48. package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js +5 -0
  49. package/lib/module/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.js.map +1 -0
  50. package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js +64 -0
  51. package/lib/module/headless_checkout/NativePrimerHeadlessUniversalCheckout.js.map +1 -0
  52. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +104 -0
  53. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -0
  54. package/lib/module/headless_checkout/types.js +2 -0
  55. package/lib/module/headless_checkout/types.js.map +1 -0
  56. package/lib/module/index.js +3 -1
  57. package/lib/module/index.js.map +1 -1
  58. package/lib/typescript/PrimerInput.d.ts +15 -0
  59. package/lib/typescript/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.d.ts +1 -0
  60. package/lib/typescript/headless_checkout/NativePrimerHeadlessUniversalCheckout.d.ts +10 -0
  61. package/lib/typescript/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +14 -0
  62. package/lib/typescript/headless_checkout/types.d.ts +16 -0
  63. package/lib/typescript/index.d.ts +3 -1
  64. package/package.json +1 -1
  65. package/primer-io-react-native.podspec +1 -1
  66. package/src/Primer.ts +2 -0
  67. package/src/PrimerInput.tsx +73 -0
  68. package/src/RNTPrimerHeadlessUniversalCheckoutCardFormUIManager.tsx +2 -0
  69. package/src/headless_checkout/NativePrimerHeadlessUniversalCheckout.ts +94 -0
  70. package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +136 -0
  71. package/src/headless_checkout/types.ts +18 -0
  72. package/src/index.tsx +3 -1
@@ -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,2 @@
1
+
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["PrimerNativeMapping","Primer"],"mappings":"AACA,SAASA,mBAAT,QAAoC,UAApC;AAEA,MAAMC,MAAe,GAAGD,mBAAxB;AAEA,SAASC,MAAT","sourcesContent":["import type { IPrimer } from './models/primer';\nimport { PrimerNativeMapping } from './Primer';\n\nconst Primer: IPrimer = PrimerNativeMapping;\n\nexport { Primer };\n"]}
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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer-io/react-native",
3
- "version": "0.12.1",
3
+ "version": "0.13.0-beta.1",
4
4
  "description": "Primer SDK for RN",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -18,5 +18,5 @@ Pod::Spec.new do |s|
18
18
 
19
19
 
20
20
  s.dependency "React-Core"
21
- s.dependency "PrimerSDK", "1.29.0"
21
+ s.dependency "PrimerSDK", "1.28.0-beta.6"
22
22
  end
package/src/Primer.ts CHANGED
@@ -55,6 +55,8 @@ export const PrimerNativeMapping: IPrimer = {
55
55
  },
56
56
  };
57
57
 
58
+ //
59
+
58
60
  function configure(config: PrimerConfig): void {
59
61
  configureTheme(config.theme);
60
62
  configureSettings(config.settings);
@@ -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,2 @@
1
+ import { NativeModules } from 'react-native';
2
+ export const { PrimerHeadlessUniversalCheckoutCardFormUIManager } = NativeModules;
@@ -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 };