@primer-io/react-native 0.15.8 → 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.
Files changed (203) hide show
  1. package/README.md +114 -24
  2. package/android/build.gradle +7 -2
  3. package/android/gradle.properties +3 -3
  4. package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +118 -148
  5. package/android/src/main/java/com/primerioreactnative/PrimerRNEventListener.kt +212 -127
  6. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerCheckoutDataRN.kt +12 -0
  7. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerClientSessionRN.kt +54 -0
  8. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerErrorRN.kt +3 -7
  9. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEvents.kt +13 -0
  10. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentInstrumentTokenRN.kt +4 -4
  11. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentMethodDataRN.kt +8 -0
  12. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerSettingsRN.kt +43 -125
  13. package/android/src/main/java/com/primerioreactnative/extensions/Payment.kt +6 -0
  14. package/android/src/main/java/com/primerioreactnative/extensions/PrimerAddress.kt +15 -0
  15. package/android/src/main/java/com/primerioreactnative/extensions/PrimerCheckoutData.kt +7 -0
  16. package/android/src/main/java/com/primerioreactnative/extensions/PrimerClientSession.kt +15 -0
  17. package/android/src/main/java/com/primerioreactnative/extensions/PrimerCustomer.kt +13 -0
  18. package/android/src/main/java/com/primerioreactnative/extensions/PrimerLineItem.kt +8 -0
  19. package/android/src/main/java/com/primerioreactnative/extensions/PrimerOrder.kt +6 -0
  20. package/android/src/main/java/com/primerioreactnative/extensions/PrimerPaymentMethodData.kt +7 -0
  21. package/android/src/main/java/com/primerioreactnative/utils/ErrorHelper.kt +1 -3
  22. package/android/src/main/java/com/primerioreactnative/utils/JsonConverter.kt +45 -0
  23. package/android/src/main/java/com/primerioreactnative/utils/PrimerImplementedRNCallbacks.kt +16 -6
  24. package/ios/DataModels/ImplementedRNCallbacks.swift +31 -0
  25. package/ios/DataModels/PrimerErrorRN.swift +0 -17
  26. package/ios/DataModels/PrimerSettingsRN.swift +70 -147
  27. package/ios/DataModels/PrimerThemeRN.swift +1 -10
  28. package/ios/{Pods/Manifest.lock → Podfile.lock} +1 -1
  29. package/ios/RNTPrimer.m +26 -12
  30. package/ios/RNTPrimer.swift +295 -249
  31. package/ios/ReactNative.xcodeproj/project.pbxproj +14 -14
  32. package/lib/commonjs/Primer.js +201 -150
  33. package/lib/commonjs/Primer.js.map +1 -1
  34. package/lib/commonjs/RNPrimer.js +102 -41
  35. package/lib/commonjs/RNPrimer.js.map +1 -1
  36. package/lib/commonjs/index.js +117 -4
  37. package/lib/commonjs/index.js.map +1 -1
  38. package/lib/commonjs/models/Primer.js +6 -0
  39. package/lib/commonjs/models/{action-request.js.map → Primer.js.map} +0 -0
  40. package/lib/commonjs/models/PrimerCheckoutData.js +9 -0
  41. package/lib/commonjs/models/PrimerCheckoutData.js.map +1 -0
  42. package/lib/commonjs/models/PrimerCheckoutPaymentMethodData.js +2 -0
  43. package/lib/commonjs/models/{client-session-actions-request.js.map → PrimerCheckoutPaymentMethodData.js.map} +0 -0
  44. package/lib/commonjs/models/PrimerClientSession.js +2 -0
  45. package/lib/commonjs/models/{primer-callbacks.js.map → PrimerClientSession.js.map} +0 -0
  46. package/lib/commonjs/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
  47. package/lib/commonjs/models/PrimerCountryCode.js.map +1 -0
  48. package/lib/commonjs/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
  49. package/lib/commonjs/models/PrimerCurrencyCode.js.map +1 -0
  50. package/lib/commonjs/models/PrimerError.js +28 -0
  51. package/lib/commonjs/models/PrimerError.js.map +1 -0
  52. package/lib/commonjs/models/PrimerPaymentMethodTokenData.js +14 -0
  53. package/lib/commonjs/models/PrimerPaymentMethodTokenData.js.map +1 -0
  54. package/lib/commonjs/models/PrimerSessionIntent.js +14 -0
  55. package/lib/commonjs/models/PrimerSessionIntent.js.map +1 -0
  56. package/lib/commonjs/models/PrimerSettings.js +6 -0
  57. package/lib/commonjs/models/{primer-config.js.map → PrimerSettings.js.map} +0 -0
  58. package/lib/commonjs/models/PrimerTheme.js +2 -0
  59. package/lib/commonjs/models/{primer-request.js.map → PrimerTheme.js.map} +0 -0
  60. package/lib/commonjs/utils/index.js +1 -1
  61. package/lib/commonjs/utils/index.js.map +1 -1
  62. package/lib/module/Primer.js +201 -137
  63. package/lib/module/Primer.js.map +1 -1
  64. package/lib/module/RNPrimer.js +102 -41
  65. package/lib/module/RNPrimer.js.map +1 -1
  66. package/lib/module/index.js +9 -4
  67. package/lib/module/index.js.map +1 -1
  68. package/lib/module/models/Primer.js +2 -0
  69. package/lib/{commonjs/models/primer-settings.js.map → module/models/Primer.js.map} +0 -0
  70. package/lib/module/models/PrimerCheckoutData.js +7 -0
  71. package/lib/module/models/PrimerCheckoutData.js.map +1 -0
  72. package/lib/module/models/PrimerCheckoutPaymentMethodData.js +2 -0
  73. package/lib/{commonjs/models/primer-theme.js.map → module/models/PrimerCheckoutPaymentMethodData.js.map} +0 -0
  74. package/lib/module/models/PrimerClientSession.js +2 -0
  75. package/lib/{commonjs/models/primer.js.map → module/models/PrimerClientSession.js.map} +0 -0
  76. package/lib/module/models/{utils/countryCode.js → PrimerCountryCode.js} +1 -1
  77. package/lib/module/models/PrimerCountryCode.js.map +1 -0
  78. package/lib/module/models/{utils/currencyCode.js → PrimerCurrencyCode.js} +1 -1
  79. package/lib/module/models/PrimerCurrencyCode.js.map +1 -0
  80. package/lib/module/models/PrimerError.js +19 -0
  81. package/lib/module/models/PrimerError.js.map +1 -0
  82. package/lib/module/models/PrimerPaymentMethodTokenData.js +7 -0
  83. package/lib/module/models/PrimerPaymentMethodTokenData.js.map +1 -0
  84. package/lib/module/models/PrimerSessionIntent.js +7 -0
  85. package/lib/module/models/PrimerSessionIntent.js.map +1 -0
  86. package/lib/module/models/PrimerSettings.js +2 -0
  87. package/lib/module/models/{action-request.js.map → PrimerSettings.js.map} +0 -0
  88. package/lib/module/models/PrimerTheme.js +2 -0
  89. package/lib/module/models/{client-session-actions-request.js.map → PrimerTheme.js.map} +0 -0
  90. package/lib/module/utils/index.js.map +1 -1
  91. package/lib/typescript/Primer.d.ts +2 -15
  92. package/lib/typescript/RNPrimer.d.ts +16 -9
  93. package/lib/typescript/index.d.ts +9 -3
  94. package/lib/typescript/models/Primer.d.ts +26 -0
  95. package/lib/typescript/models/PrimerCheckoutData.d.ts +15 -0
  96. package/lib/typescript/models/PrimerCheckoutPaymentMethodData.d.ts +5 -0
  97. package/lib/typescript/models/PrimerClientSession.d.ts +45 -0
  98. package/lib/typescript/models/{utils/countryCode.d.ts → PrimerCountryCode.d.ts} +1 -1
  99. package/lib/typescript/models/{utils/currencyCode.d.ts → PrimerCurrencyCode.d.ts} +1 -1
  100. package/lib/typescript/models/PrimerError.d.ts +11 -0
  101. package/lib/typescript/models/PrimerPaymentMethodTokenData.d.ts +116 -0
  102. package/lib/typescript/models/PrimerSessionIntent.d.ts +4 -0
  103. package/lib/typescript/models/PrimerSettings.d.ts +73 -0
  104. package/lib/typescript/models/{primer-theme.d.ts → PrimerTheme.d.ts} +1 -1
  105. package/lib/typescript/utils/index.d.ts +1 -1
  106. package/package.json +1 -1
  107. package/primer-io-react-native.podspec +1 -1
  108. package/src/Primer.ts +228 -172
  109. package/src/RNPrimer.ts +135 -51
  110. package/src/index.tsx +33 -6
  111. package/src/models/Primer.ts +35 -0
  112. package/src/models/PrimerCheckoutData.ts +18 -0
  113. package/src/models/PrimerCheckoutPaymentMethodData.ts +5 -0
  114. package/src/models/PrimerClientSession.ts +53 -0
  115. package/src/models/{utils/countryCode.ts → PrimerCountryCode.ts} +1 -1
  116. package/src/models/{utils/currencyCode.ts → PrimerCurrencyCode.ts} +1 -1
  117. package/src/models/PrimerError.ts +20 -0
  118. package/src/models/PrimerPaymentMethodTokenData.ts +130 -0
  119. package/src/models/PrimerSessionIntent.ts +4 -0
  120. package/src/models/PrimerSettings.ts +93 -0
  121. package/src/models/{primer-theme.ts → PrimerTheme.ts} +1 -1
  122. package/src/utils/index.ts +1 -1
  123. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerEventsRN.kt +0 -11
  124. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerIntentRN.kt +0 -80
  125. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerOnClientSessionActionsRequestRN.kt +0 -65
  126. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerRequestRN.kt +0 -9
  127. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerThemeRN.kt +0 -51
  128. package/android/src/main/java/com/primerioreactnative/utils/PrimerEventQueueRN.kt +0 -30
  129. package/ios/DataModels/PrimerIntentRN.swift +0 -10
  130. package/ios/DataModels/PrimerRequestRN.swift +0 -14
  131. package/ios/Pods/Pods.xcodeproj/project.pbxproj +0 -344
  132. package/ios/Pods/Pods.xcodeproj/xcuserdata/aladintaleb.xcuserdatad/xcschemes/Pods-ReactNative.xcscheme +0 -60
  133. package/ios/Pods/Pods.xcodeproj/xcuserdata/aladintaleb.xcuserdatad/xcschemes/xcschememanagement.plist +0 -16
  134. package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-acknowledgements.markdown +0 -3
  135. package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-acknowledgements.plist +0 -29
  136. package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative-dummy.m +0 -5
  137. package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative.debug.xcconfig +0 -8
  138. package/ios/Pods/Target Support Files/Pods-ReactNative/Pods-ReactNative.release.xcconfig +0 -8
  139. package/ios/ReactNative.xcworkspace/xcuserdata/aladintaleb.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  140. package/lib/commonjs/models/action-request.js +0 -2
  141. package/lib/commonjs/models/client-session-actions-request.js +0 -2
  142. package/lib/commonjs/models/payment-instrument-token.js +0 -30
  143. package/lib/commonjs/models/payment-instrument-token.js.map +0 -1
  144. package/lib/commonjs/models/primer-callbacks.js +0 -2
  145. package/lib/commonjs/models/primer-config.js +0 -2
  146. package/lib/commonjs/models/primer-error.js +0 -4
  147. package/lib/commonjs/models/primer-error.js.map +0 -1
  148. package/lib/commonjs/models/primer-intent.js +0 -4
  149. package/lib/commonjs/models/primer-intent.js.map +0 -1
  150. package/lib/commonjs/models/primer-request.js +0 -2
  151. package/lib/commonjs/models/primer-settings.js +0 -2
  152. package/lib/commonjs/models/primer-theme.js +0 -2
  153. package/lib/commonjs/models/primer.js +0 -2
  154. package/lib/commonjs/models/utils/countryCode.js.map +0 -1
  155. package/lib/commonjs/models/utils/currencyCode.js.map +0 -1
  156. package/lib/commonjs/models/utils/redirectScheme.js +0 -4
  157. package/lib/commonjs/models/utils/redirectScheme.js.map +0 -1
  158. package/lib/module/models/action-request.js +0 -2
  159. package/lib/module/models/client-session-actions-request.js +0 -2
  160. package/lib/module/models/payment-instrument-token.js +0 -28
  161. package/lib/module/models/payment-instrument-token.js.map +0 -1
  162. package/lib/module/models/primer-callbacks.js +0 -2
  163. package/lib/module/models/primer-callbacks.js.map +0 -1
  164. package/lib/module/models/primer-config.js +0 -2
  165. package/lib/module/models/primer-config.js.map +0 -1
  166. package/lib/module/models/primer-error.js +0 -2
  167. package/lib/module/models/primer-error.js.map +0 -1
  168. package/lib/module/models/primer-intent.js +0 -2
  169. package/lib/module/models/primer-intent.js.map +0 -1
  170. package/lib/module/models/primer-request.js +0 -2
  171. package/lib/module/models/primer-request.js.map +0 -1
  172. package/lib/module/models/primer-settings.js +0 -2
  173. package/lib/module/models/primer-settings.js.map +0 -1
  174. package/lib/module/models/primer-theme.js +0 -2
  175. package/lib/module/models/primer-theme.js.map +0 -1
  176. package/lib/module/models/primer.js +0 -2
  177. package/lib/module/models/primer.js.map +0 -1
  178. package/lib/module/models/utils/countryCode.js.map +0 -1
  179. package/lib/module/models/utils/currencyCode.js.map +0 -1
  180. package/lib/module/models/utils/redirectScheme.js +0 -2
  181. package/lib/module/models/utils/redirectScheme.js.map +0 -1
  182. package/lib/typescript/models/action-request.d.ts +0 -10
  183. package/lib/typescript/models/client-session-actions-request.d.ts +0 -15
  184. package/lib/typescript/models/payment-instrument-token.d.ts +0 -76
  185. package/lib/typescript/models/primer-callbacks.d.ts +0 -10
  186. package/lib/typescript/models/primer-config.d.ts +0 -44
  187. package/lib/typescript/models/primer-error.d.ts +0 -8
  188. package/lib/typescript/models/primer-intent.d.ts +0 -13
  189. package/lib/typescript/models/primer-request.d.ts +0 -7
  190. package/lib/typescript/models/primer-settings.d.ts +0 -65
  191. package/lib/typescript/models/primer.d.ts +0 -33
  192. package/lib/typescript/models/utils/redirectScheme.d.ts +0 -3
  193. package/src/models/action-request.ts +0 -12
  194. package/src/models/client-session-actions-request.ts +0 -21
  195. package/src/models/payment-instrument-token.ts +0 -109
  196. package/src/models/primer-callbacks.ts +0 -14
  197. package/src/models/primer-config.ts +0 -55
  198. package/src/models/primer-error.ts +0 -19
  199. package/src/models/primer-intent.ts +0 -49
  200. package/src/models/primer-request.ts +0 -7
  201. package/src/models/primer-settings.ts +0 -73
  202. package/src/models/primer.ts +0 -41
  203. 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 { PrimerSettings } from './models/primer-settings';
3
- import type { PrimerTheme } from './models/primer-theme';
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
- | 'onClientTokenCallback'
10
- | 'onClientSessionActions'
11
- | 'onTokenizeSuccessCallback'
12
- | 'onVaultSuccess'
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,35 +52,16 @@ const RNPrimer = {
38
52
  },
39
53
 
40
54
  removeAllListeners() {
41
- eventEmitter.removeAllListeners('onClientTokenCallback');
42
- eventEmitter.removeAllListeners('onClientSessionActions');
43
- eventEmitter.removeAllListeners('onTokenizeSuccessCallback');
44
- eventEmitter.removeAllListeners('onVaultSuccess');
45
- eventEmitter.removeAllListeners('onResumeSuccess');
46
- eventEmitter.removeAllListeners('onCheckoutDismissed');
47
- eventEmitter.removeAllListeners('onError');
48
- eventEmitter.removeAllListeners('detectImplementedRNCallbacks');
55
+ eventTypes.forEach((eventType) => RNPrimer.removeAllListenersForEvent(eventType));
49
56
  },
50
57
 
51
58
  ///////////////////////////////////////////
52
59
  // Native API
53
60
  ///////////////////////////////////////////
54
- configure: (
55
- settings: PrimerSettings | null,
56
- theme: PrimerTheme | null
57
- ): Promise<void> => {
61
+ configure: (settings: PrimerSettings | undefined): Promise<void> => {
58
62
  return new Promise(async (resolve, reject) => {
59
63
  try {
60
- if (settings === null && theme === null) {
61
- // Do nothing, SDK will use default settings and theme.
62
- } else if (settings && theme === null) {
63
- await NativePrimer.configureWithSettings(JSON.stringify(settings));
64
- } else if (settings === null && theme) {
65
- await NativePrimer.configureWithTheme(JSON.stringify(theme));
66
- } else {
67
- await NativePrimer.configureWithSettings(JSON.stringify(settings));
68
- await NativePrimer.configureWithTheme(JSON.stringify(theme));
69
- }
64
+ await NativePrimer.configure(JSON.stringify(settings) || "");
70
65
  resolve();
71
66
  } catch (err) {
72
67
  reject(err);
@@ -74,14 +69,10 @@ const RNPrimer = {
74
69
  });
75
70
  },
76
71
 
77
- showUniversalCheckout: (clientToken: string | undefined): Promise<void> => {
72
+ showUniversalCheckout: (clientToken: string): Promise<void> => {
78
73
  return new Promise(async (resolve, reject) => {
79
74
  try {
80
- if (clientToken) {
81
- await NativePrimer.showUniversalCheckoutWithClientToken(clientToken);
82
- } else {
83
- await NativePrimer.showUniversalCheckout();
84
- }
75
+ await NativePrimer.showUniversalCheckoutWithClientToken(clientToken);
85
76
  resolve();
86
77
  } catch (err) {
87
78
  reject(err);
@@ -92,11 +83,7 @@ const RNPrimer = {
92
83
  showVaultManager: (clientToken: string | undefined): Promise<void> => {
93
84
  return new Promise(async (resolve, reject) => {
94
85
  try {
95
- if (clientToken) {
96
- await NativePrimer.showVaultManager(clientToken);
97
- } else {
98
- await NativePrimer.showVaultManager();
99
- }
86
+ await NativePrimer.showVaultManagerWithClientToken(clientToken);
100
87
  resolve();
101
88
  } catch (err) {
102
89
  reject(err);
@@ -105,13 +92,41 @@ const RNPrimer = {
105
92
  },
106
93
 
107
94
  showPaymentMethod: (
108
- clientToken: string,
109
95
  paymentMethodType: string,
110
- intent: "checkout" | "vault"
96
+ intent: PrimerSessionIntent,
97
+ clientToken: string
111
98
  ): Promise<void> => {
112
99
  return new Promise(async (resolve, reject) => {
113
100
  try {
114
- await NativePrimer.showPaymentMethod(clientToken, paymentMethodType, intent);
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);
115
130
  resolve();
116
131
  } catch (err) {
117
132
  reject(err);
@@ -119,10 +134,10 @@ const RNPrimer = {
119
134
  });
120
135
  },
121
136
 
122
- handleNewClientToken: (clientToken: string | undefined): Promise<void> => {
137
+ handleTokenizationSuccess: (): Promise<void> => {
123
138
  return new Promise(async (resolve, reject) => {
124
139
  try {
125
- await NativePrimer.handleNewClientToken(clientToken);
140
+ await NativePrimer.handleTokenizationSuccess();
126
141
  resolve();
127
142
  } catch (err) {
128
143
  reject(err);
@@ -130,10 +145,10 @@ const RNPrimer = {
130
145
  });
131
146
  },
132
147
 
133
- handleError: (err: IPrimerError): Promise<void> => {
148
+ handleTokenizationFailure: (errorMessage: string | null): Promise<void> => {
134
149
  return new Promise(async (resolve, reject) => {
135
150
  try {
136
- await NativePrimer.handleError(JSON.stringify(err));
151
+ await NativePrimer.handleTokenizationFailure(errorMessage || "");
137
152
  resolve();
138
153
  } catch (err) {
139
154
  reject(err);
@@ -141,6 +156,78 @@ const RNPrimer = {
141
156
  });
142
157
  },
143
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
+
144
231
  handleSuccess: (): Promise<void> => {
145
232
  return new Promise(async (resolve, reject) => {
146
233
  try {
@@ -163,9 +250,6 @@ const RNPrimer = {
163
250
  });
164
251
  },
165
252
 
166
- dispose: (): void => {
167
-
168
- }
169
253
  };
170
254
 
171
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
- const Primer: IPrimer = PrimerNativeMapping;
6
-
7
- export { Primer };
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,5 @@
1
+ export type PrimerCheckoutPaymentMethodData = IPrimerCheckoutPaymentMethodData;
2
+
3
+ interface IPrimerCheckoutPaymentMethodData {
4
+ paymentMethodType: string;
5
+ }
@@ -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
+ }
@@ -246,4 +246,4 @@ var countries = [
246
246
  'ZW',
247
247
  ] as const;
248
248
 
249
- export type CountryCode = typeof countries[number];
249
+ export type PrimerCountryCode = typeof countries[number];
@@ -179,4 +179,4 @@ const currencies = [
179
179
  'ZMW',
180
180
  ] as const;
181
181
 
182
- export type CurrencyCode = typeof currencies[number];
182
+ export type PrimerCurrencyCode = typeof currencies[number];
@@ -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,4 @@
1
+ export enum PrimerSessionIntent {
2
+ CHECKOUT = 'CHECKOUT',
3
+ VAULT = 'VAULT'
4
+ }
@@ -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
+ }