@primer-io/react-native 0.15.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +122 -143
  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 +69 -150
  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 +297 -237
  31. package/ios/ReactNative.xcodeproj/project.pbxproj +14 -14
  32. package/lib/commonjs/Primer.js +187 -176
  33. package/lib/commonjs/Primer.js.map +1 -1
  34. package/lib/commonjs/RNPrimer.js +102 -40
  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 +187 -162
  63. package/lib/module/Primer.js.map +1 -1
  64. package/lib/module/RNPrimer.js +102 -40
  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 +214 -196
  109. package/src/RNPrimer.ts +135 -50
  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 -40
  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 -63
  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 -50
  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 -70
  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,34 +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('onResumeSuccess');
45
- eventEmitter.removeAllListeners('onCheckoutDismissed');
46
- eventEmitter.removeAllListeners('onError');
47
- eventEmitter.removeAllListeners('detectImplementedRNCallbacks');
55
+ eventTypes.forEach((eventType) => RNPrimer.removeAllListenersForEvent(eventType));
48
56
  },
49
57
 
50
58
  ///////////////////////////////////////////
51
59
  // Native API
52
60
  ///////////////////////////////////////////
53
- configure: (
54
- settings: PrimerSettings | null,
55
- theme: PrimerTheme | null
56
- ): Promise<void> => {
61
+ configure: (settings: PrimerSettings | undefined): Promise<void> => {
57
62
  return new Promise(async (resolve, reject) => {
58
63
  try {
59
- if (settings === null && theme === null) {
60
- // Do nothing, SDK will use default settings and theme.
61
- } else if (settings && theme === null) {
62
- await NativePrimer.configureWithSettings(JSON.stringify(settings));
63
- } else if (settings === null && theme) {
64
- await NativePrimer.configureWithTheme(JSON.stringify(theme));
65
- } else {
66
- await NativePrimer.configureWithSettings(JSON.stringify(settings));
67
- await NativePrimer.configureWithTheme(JSON.stringify(theme));
68
- }
64
+ await NativePrimer.configure(JSON.stringify(settings) || "");
69
65
  resolve();
70
66
  } catch (err) {
71
67
  reject(err);
@@ -73,14 +69,10 @@ const RNPrimer = {
73
69
  });
74
70
  },
75
71
 
76
- showUniversalCheckout: (clientToken: string | undefined): Promise<void> => {
72
+ showUniversalCheckout: (clientToken: string): Promise<void> => {
77
73
  return new Promise(async (resolve, reject) => {
78
74
  try {
79
- if (clientToken) {
80
- await NativePrimer.showUniversalCheckoutWithClientToken(clientToken);
81
- } else {
82
- await NativePrimer.showUniversalCheckout();
83
- }
75
+ await NativePrimer.showUniversalCheckoutWithClientToken(clientToken);
84
76
  resolve();
85
77
  } catch (err) {
86
78
  reject(err);
@@ -91,11 +83,7 @@ const RNPrimer = {
91
83
  showVaultManager: (clientToken: string | undefined): Promise<void> => {
92
84
  return new Promise(async (resolve, reject) => {
93
85
  try {
94
- if (clientToken) {
95
- await NativePrimer.showVaultManager(clientToken);
96
- } else {
97
- await NativePrimer.showVaultManager();
98
- }
86
+ await NativePrimer.showVaultManagerWithClientToken(clientToken);
99
87
  resolve();
100
88
  } catch (err) {
101
89
  reject(err);
@@ -104,13 +92,41 @@ const RNPrimer = {
104
92
  },
105
93
 
106
94
  showPaymentMethod: (
107
- clientToken: string,
108
95
  paymentMethodType: string,
109
- intent: "checkout" | "vault"
96
+ intent: PrimerSessionIntent,
97
+ clientToken: string
110
98
  ): Promise<void> => {
111
99
  return new Promise(async (resolve, reject) => {
112
100
  try {
113
- await NativePrimer.showPaymentMethod(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);
114
130
  resolve();
115
131
  } catch (err) {
116
132
  reject(err);
@@ -118,10 +134,10 @@ const RNPrimer = {
118
134
  });
119
135
  },
120
136
 
121
- handleNewClientToken: (clientToken: string | undefined): Promise<void> => {
137
+ handleTokenizationSuccess: (): Promise<void> => {
122
138
  return new Promise(async (resolve, reject) => {
123
139
  try {
124
- await NativePrimer.handleNewClientToken(clientToken);
140
+ await NativePrimer.handleTokenizationSuccess();
125
141
  resolve();
126
142
  } catch (err) {
127
143
  reject(err);
@@ -129,10 +145,10 @@ const RNPrimer = {
129
145
  });
130
146
  },
131
147
 
132
- handleError: (err: IPrimerError): Promise<void> => {
148
+ handleTokenizationFailure: (errorMessage: string | null): Promise<void> => {
133
149
  return new Promise(async (resolve, reject) => {
134
150
  try {
135
- await NativePrimer.handleError(JSON.stringify(err));
151
+ await NativePrimer.handleTokenizationFailure(errorMessage || "");
136
152
  resolve();
137
153
  } catch (err) {
138
154
  reject(err);
@@ -140,6 +156,78 @@ const RNPrimer = {
140
156
  });
141
157
  },
142
158
 
159
+ // Resume Handlers
160
+
161
+ handleResumeWithNewClientToken: (newClientToken: string): Promise<void> => {
162
+ return new Promise(async (resolve, reject) => {
163
+ try {
164
+ await NativePrimer.handleResumeWithNewClientToken(newClientToken);
165
+ resolve();
166
+ } catch (err) {
167
+ reject(err);
168
+ }
169
+ });
170
+ },
171
+
172
+ handleResumeSuccess: (): Promise<void> => {
173
+ return new Promise(async (resolve, reject) => {
174
+ try {
175
+ await NativePrimer.handleResumeSuccess();
176
+ resolve();
177
+ } catch (err) {
178
+ reject(err);
179
+ }
180
+ });
181
+ },
182
+
183
+ handleResumeFailure: (errorMessage: string | null): Promise<void> => {
184
+ return new Promise(async (resolve, reject) => {
185
+ try {
186
+ await NativePrimer.handleTokenizationFailure(errorMessage || "");
187
+ resolve();
188
+ } catch (err) {
189
+ reject(err);
190
+ }
191
+ });
192
+ },
193
+
194
+ // Payment Creation Handlers
195
+
196
+ handlePaymentCreationAbort: (errorMessage: string | null): Promise<void> => {
197
+ return new Promise(async (resolve, reject) => {
198
+ try {
199
+ await NativePrimer.handlePaymentCreationAbort(errorMessage || "");
200
+ resolve();
201
+ } catch (err) {
202
+ reject(err);
203
+ }
204
+ });
205
+ },
206
+
207
+ handlePaymentCreationContinue: (): Promise<void> => {
208
+ return new Promise(async (resolve, reject) => {
209
+ try {
210
+ await NativePrimer.handlePaymentCreationContinue();
211
+ resolve();
212
+ } catch (err) {
213
+ reject(err);
214
+ }
215
+ });
216
+ },
217
+
218
+ // Error Handler
219
+
220
+ showErrorMessage: (errorMessage: string | null): Promise<void> => {
221
+ return new Promise(async (resolve, reject) => {
222
+ try {
223
+ await NativePrimer.showErrorMessage(errorMessage || "");
224
+ resolve();
225
+ } catch (err) {
226
+ reject(err);
227
+ }
228
+ });
229
+ },
230
+
143
231
  handleSuccess: (): Promise<void> => {
144
232
  return new Promise(async (resolve, reject) => {
145
233
  try {
@@ -162,9 +250,6 @@ const RNPrimer = {
162
250
  });
163
251
  },
164
252
 
165
- dispose: (): void => {
166
-
167
- }
168
253
  };
169
254
 
170
255
  export default RNPrimer;
package/src/index.tsx CHANGED
@@ -1,7 +1,34 @@
1
- import type { IPrimer } from './models/primer';
2
- import { PrimerNativeMapping } from './Primer';
3
- // import type { IPrimerConfig as PrimerConfig } from './models/primer-config';
4
1
 
5
- 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
+ }