@primer-io/react-native 2.2.1 → 2.5.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 (51) hide show
  1. package/android/.project +11 -0
  2. package/android/.settings/org.eclipse.buildship.core.prefs +2 -2
  3. package/android/build.gradle +1 -1
  4. package/android/src/main/java/com/primerioreactnative/PrimerRN.kt +1 -20
  5. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +2 -21
  6. package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckoutListener.kt +5 -6
  7. package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +3 -1
  8. package/android/src/main/java/com/primerioreactnative/datamodels/PrimerPaymentMethodDataRN.kt +1 -3
  9. package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/PrimerRNHeadlessCheckoutInputData.kt +22 -0
  10. package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutRawDataManagerEvent.kt +7 -0
  11. package/android/src/main/java/com/primerioreactnative/huc/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManager.kt +140 -0
  12. package/android/src/main/java/com/primerioreactnative/huc/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManagerListener.kt +49 -0
  13. package/ios/DataModels/PrimerErrorRN.swift +2 -0
  14. package/ios/DataModels/RNTPrimerCardData.swift +46 -0
  15. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +70 -107
  16. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutRawDataManager.m +21 -0
  17. package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutRawDataManager.swift +152 -0
  18. package/ios/RNTPrimer.m +1 -1
  19. package/ios/RNTPrimer.swift +2 -9
  20. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +5 -4
  21. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -1
  22. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js +106 -0
  23. package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js.map +1 -0
  24. package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js +85 -0
  25. package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map +1 -0
  26. package/lib/commonjs/index.js +28 -6
  27. package/lib/commonjs/index.js.map +1 -1
  28. package/lib/commonjs/models/PrimerRawData.js +2 -0
  29. package/lib/commonjs/models/PrimerRawData.js.map +1 -0
  30. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +3 -3
  31. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -1
  32. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js +88 -0
  33. package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js.map +1 -0
  34. package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js +76 -0
  35. package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map +1 -0
  36. package/lib/module/index.js +3 -1
  37. package/lib/module/index.js.map +1 -1
  38. package/lib/module/models/PrimerRawData.js +2 -0
  39. package/lib/module/models/PrimerRawData.js.map +1 -0
  40. package/lib/typescript/src/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +1 -0
  41. package/lib/typescript/src/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.d.ts +16 -0
  42. package/lib/typescript/src/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.d.ts +12 -0
  43. package/lib/typescript/src/index.d.ts +3 -1
  44. package/lib/typescript/src/models/PrimerRawData.d.ts +9 -0
  45. package/package.json +1 -1
  46. package/primer-io-react-native.podspec +1 -1
  47. package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +3 -3
  48. package/src/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.ts +104 -0
  49. package/src/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.ts +91 -0
  50. package/src/index.tsx +8 -1
  51. package/src/models/PrimerRawData.ts +9 -0
@@ -0,0 +1,88 @@
1
+ import RNPrimerHeadlessUniversalCheckoutRawDataManager from "./RNPrimerHeadlessUniversalCheckoutRawDataManager";
2
+ import { primerSettings } from "./PrimerHeadlessUniversalCheckout";
3
+ import { PrimerError } from '../models/PrimerError';
4
+ let primerHeadlessUniversalCheckoutRawDataManagerOptions;
5
+
6
+ async function configureListeners() {
7
+ return new Promise(async (resolve, reject) => {
8
+ try {
9
+ RNPrimerHeadlessUniversalCheckoutRawDataManager.removeAllListeners();
10
+ RNPrimerHeadlessUniversalCheckoutRawDataManager.addListener('onMetadataChange', data => {
11
+ if (primerHeadlessUniversalCheckoutRawDataManagerOptions && primerHeadlessUniversalCheckoutRawDataManagerOptions.onMetadataChange) {
12
+ primerHeadlessUniversalCheckoutRawDataManagerOptions.onMetadataChange(data);
13
+ }
14
+ });
15
+ RNPrimerHeadlessUniversalCheckoutRawDataManager.addListener('onValidation', data => {
16
+ if (primerHeadlessUniversalCheckoutRawDataManagerOptions && primerHeadlessUniversalCheckoutRawDataManagerOptions.onValidation) {
17
+ let errors = [];
18
+
19
+ for (const errData of data.errors || []) {
20
+ const errorId = errData.errorId;
21
+ const description = errData.description;
22
+ const recoverySuggestion = errData.recoverySuggestion;
23
+ const primerError = new PrimerError(errorId, description || 'Unknown error', recoverySuggestion);
24
+ errors.push(primerError);
25
+ }
26
+
27
+ primerHeadlessUniversalCheckoutRawDataManagerOptions.onValidation(data.isValid, errors.length === 0 ? undefined : errors);
28
+ }
29
+ });
30
+ RNPrimerHeadlessUniversalCheckoutRawDataManager.addListener('onNativeError', data => {
31
+ if (primerSettings && primerSettings.onError) {
32
+ const errorId = data.error.errorId;
33
+ const description = data.error.description;
34
+ const recoverySuggestion = data.error.recoverySuggestion;
35
+ const primerError = new PrimerError(errorId, description || 'Unknown error', recoverySuggestion);
36
+ primerSettings.onError(primerError, null, undefined);
37
+ }
38
+ });
39
+ resolve();
40
+ } catch (err) {
41
+ reject(err);
42
+ }
43
+ });
44
+ }
45
+
46
+ class PrimerHeadlessUniversalCheckoutRawDataManagerClass {
47
+ ///////////////////////////////////////////
48
+ // Init
49
+ ///////////////////////////////////////////
50
+ constructor() {} ///////////////////////////////////////////
51
+ // API
52
+ ///////////////////////////////////////////
53
+
54
+
55
+ configure(options) {
56
+ primerHeadlessUniversalCheckoutRawDataManagerOptions = options;
57
+ configureListeners();
58
+ return RNPrimerHeadlessUniversalCheckoutRawDataManager.initialize(primerHeadlessUniversalCheckoutRawDataManagerOptions.paymentMethodType);
59
+ }
60
+
61
+ async getRequiredInputElementTypes() {
62
+ return new Promise(async (resolve, reject) => {
63
+ if (primerHeadlessUniversalCheckoutRawDataManagerOptions && primerHeadlessUniversalCheckoutRawDataManagerOptions.paymentMethodType) {
64
+ try {
65
+ const inputElementTypes = await RNPrimerHeadlessUniversalCheckoutRawDataManager.listRequiredInputElementTypesForPaymentMethodType(primerHeadlessUniversalCheckoutRawDataManagerOptions.paymentMethodType);
66
+ resolve(inputElementTypes);
67
+ } catch (err) {
68
+ reject(err);
69
+ }
70
+ } else {
71
+ const err = new PrimerError("manager-not-configured", "HeadlessUniversalCheckoutRawDataManager has not been configured", "Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.");
72
+ reject(err);
73
+ }
74
+ });
75
+ }
76
+
77
+ setRawData(rawData) {
78
+ return RNPrimerHeadlessUniversalCheckoutRawDataManager.setRawData(JSON.stringify(rawData));
79
+ }
80
+
81
+ submit() {
82
+ return RNPrimerHeadlessUniversalCheckoutRawDataManager.submit();
83
+ }
84
+
85
+ }
86
+
87
+ export const PrimerHeadlessUniversalCheckoutRawDataManager = new PrimerHeadlessUniversalCheckoutRawDataManagerClass();
88
+ //# sourceMappingURL=PrimerHeadlessUniversalCheckoutRawDataManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["PrimerHeadlessUniversalCheckoutRawDataManager.ts"],"names":["RNPrimerHeadlessUniversalCheckoutRawDataManager","primerSettings","PrimerError","primerHeadlessUniversalCheckoutRawDataManagerOptions","configureListeners","Promise","resolve","reject","removeAllListeners","addListener","data","onMetadataChange","onValidation","errors","errData","errorId","description","recoverySuggestion","primerError","push","isValid","length","undefined","onError","error","err","PrimerHeadlessUniversalCheckoutRawDataManagerClass","constructor","configure","options","initialize","paymentMethodType","getRequiredInputElementTypes","inputElementTypes","listRequiredInputElementTypesForPaymentMethodType","setRawData","rawData","JSON","stringify","submit","PrimerHeadlessUniversalCheckoutRawDataManager"],"mappings":"AACA,OAAOA,+CAAP,MAA4D,mDAA5D;AACA,SAASC,cAAT,QAA+B,mCAA/B;AACA,SAASC,WAAT,QAA4B,uBAA5B;AAEA,IAAIC,oDAAJ;;AAEA,eAAeC,kBAAf,GAAmD;AAC/C,SAAO,IAAIC,OAAJ,CAAY,OAAOC,OAAP,EAAgBC,MAAhB,KAA2B;AAC1C,QAAI;AACAP,MAAAA,+CAA+C,CAACQ,kBAAhD;AAEAR,MAAAA,+CAA+C,CAACS,WAAhD,CAA4D,kBAA5D,EAAgFC,IAAI,IAAI;AACpF,YAAIP,oDAAoD,IAAIA,oDAAoD,CAACQ,gBAAjH,EAAmI;AAC/HR,UAAAA,oDAAoD,CAACQ,gBAArD,CAAsED,IAAtE;AACH;AACJ,OAJD;AAMAV,MAAAA,+CAA+C,CAACS,WAAhD,CAA4D,cAA5D,EAA4EC,IAAI,IAAI;AAChF,YAAIP,oDAAoD,IAAIA,oDAAoD,CAACS,YAAjH,EAA+H;AAC3H,cAAIC,MAAqB,GAAG,EAA5B;;AACA,eAAK,MAAMC,OAAX,IAAuBJ,IAAI,CAACG,MAAL,IAAe,EAAtC,EAA2C;AACvC,kBAAME,OAAe,GAAGD,OAAO,CAACC,OAAhC;AACA,kBAAMC,WAA+B,GAAGF,OAAO,CAACE,WAAhD;AACA,kBAAMC,kBAAsC,GAAGH,OAAO,CAACG,kBAAvD;AACA,kBAAMC,WAAW,GAAG,IAAIhB,WAAJ,CAAgBa,OAAhB,EAAyBC,WAAW,IAAI,eAAxC,EAAyDC,kBAAzD,CAApB;AACAJ,YAAAA,MAAM,CAACM,IAAP,CAAYD,WAAZ;AACH;;AAEDf,UAAAA,oDAAoD,CAACS,YAArD,CAAkEF,IAAI,CAACU,OAAvE,EAAgFP,MAAM,CAACQ,MAAP,KAAkB,CAAlB,GAAsBC,SAAtB,GAAkCT,MAAlH;AACH;AACJ,OAbD;AAeAb,MAAAA,+CAA+C,CAACS,WAAhD,CAA4D,eAA5D,EAA6EC,IAAI,IAAI;AACjF,YAAIT,cAAc,IAAIA,cAAc,CAACsB,OAArC,EAA8C;AAC1C,gBAAMR,OAAe,GAAGL,IAAI,CAACc,KAAL,CAAWT,OAAnC;AACA,gBAAMC,WAA+B,GAAGN,IAAI,CAACc,KAAL,CAAWR,WAAnD;AACA,gBAAMC,kBAAsC,GAAGP,IAAI,CAACc,KAAL,CAAWP,kBAA1D;AACA,gBAAMC,WAAW,GAAG,IAAIhB,WAAJ,CAAgBa,OAAhB,EAAyBC,WAAW,IAAI,eAAxC,EAAyDC,kBAAzD,CAApB;AACAhB,UAAAA,cAAc,CAACsB,OAAf,CAAuBL,WAAvB,EAAoC,IAApC,EAA0CI,SAA1C;AACH;AACJ,OARD;AASAhB,MAAAA,OAAO;AAEV,KAnCD,CAmCE,OAAOmB,GAAP,EAAY;AACVlB,MAAAA,MAAM,CAACkB,GAAD,CAAN;AACH;AACJ,GAvCM,CAAP;AAwCH;;AAQD,MAAMC,kDAAN,CAAyD;AAErD;AACA;AACA;AACAC,EAAAA,WAAW,GAAG,CAEb,CAPoD,CASrD;AACA;AACA;;;AAEAC,EAAAA,SAAS,CAACC,OAAD,EAA+E;AACpF1B,IAAAA,oDAAoD,GAAG0B,OAAvD;AACAzB,IAAAA,kBAAkB;AAClB,WAAOJ,+CAA+C,CAAC8B,UAAhD,CAA2D3B,oDAAoD,CAAC4B,iBAAhH,CAAP;AACH;;AAEiC,QAA5BC,4BAA4B,GAAsB;AACpD,WAAO,IAAI3B,OAAJ,CAAY,OAAOC,OAAP,EAAgBC,MAAhB,KAA2B;AAC1C,UACIJ,oDAAoD,IACpDA,oDAAoD,CAAC4B,iBAFzD,EAGE;AACE,YAAI;AACA,gBAAME,iBAAiB,GAAG,MAAMjC,+CAA+C,CAACkC,iDAAhD,CAAkG/B,oDAAoD,CAAC4B,iBAAvJ,CAAhC;AACAzB,UAAAA,OAAO,CAAC2B,iBAAD,CAAP;AACH,SAHD,CAGE,OAAOR,GAAP,EAAY;AACVlB,UAAAA,MAAM,CAACkB,GAAD,CAAN;AACH;AACJ,OAVD,MAUO;AACH,cAAMA,GAAG,GAAG,IAAIvB,WAAJ,CAAgB,wBAAhB,EAA0C,iEAA1C,EAA6G,sFAA7G,CAAZ;AACAK,QAAAA,MAAM,CAACkB,GAAD,CAAN;AACH;AACJ,KAfM,CAAP;AAgBH;;AAEDU,EAAAA,UAAU,CAACC,OAAD,EAAwC;AAC9C,WAAOpC,+CAA+C,CAACmC,UAAhD,CAA2DE,IAAI,CAACC,SAAL,CAAeF,OAAf,CAA3D,CAAP;AACH;;AAEDG,EAAAA,MAAM,GAAkB;AACpB,WAAOvC,+CAA+C,CAACuC,MAAhD,EAAP;AACH;;AA5CoD;;AA+CzD,OAAO,MAAMC,6CAA6C,GAAG,IAAId,kDAAJ,EAAtD","sourcesContent":["import type { PrimerRawData } from \"..\";\nimport RNPrimerHeadlessUniversalCheckoutRawDataManager from \"./RNPrimerHeadlessUniversalCheckoutRawDataManager\";\nimport { primerSettings } from \"./PrimerHeadlessUniversalCheckout\"\nimport { PrimerError } from '../models/PrimerError';\n\nlet primerHeadlessUniversalCheckoutRawDataManagerOptions: PrimerHeadlessUniversalCheckoutRawDataManagerOptions | undefined;\n\nasync function configureListeners(): Promise<void> {\n return new Promise(async (resolve, reject) => {\n try {\n RNPrimerHeadlessUniversalCheckoutRawDataManager.removeAllListeners();\n\n RNPrimerHeadlessUniversalCheckoutRawDataManager.addListener('onMetadataChange', data => {\n if (primerHeadlessUniversalCheckoutRawDataManagerOptions && primerHeadlessUniversalCheckoutRawDataManagerOptions.onMetadataChange) {\n primerHeadlessUniversalCheckoutRawDataManagerOptions.onMetadataChange(data);\n }\n });\n\n RNPrimerHeadlessUniversalCheckoutRawDataManager.addListener('onValidation', data => {\n if (primerHeadlessUniversalCheckoutRawDataManagerOptions && primerHeadlessUniversalCheckoutRawDataManagerOptions.onValidation) {\n let errors: PrimerError[] = [];\n for (const errData of (data.errors || [])) {\n const errorId: string = errData.errorId;\n const description: string | undefined = errData.description;\n const recoverySuggestion: string | undefined = errData.recoverySuggestion;\n const primerError = new PrimerError(errorId, description || 'Unknown error', recoverySuggestion);\n errors.push(primerError);\n }\n\n primerHeadlessUniversalCheckoutRawDataManagerOptions.onValidation(data.isValid, errors.length === 0 ? undefined : errors);\n }\n });\n\n RNPrimerHeadlessUniversalCheckoutRawDataManager.addListener('onNativeError', data => {\n if (primerSettings && primerSettings.onError) {\n const errorId: string = data.error.errorId;\n const description: string | undefined = data.error.description;\n const recoverySuggestion: string | undefined = data.error.recoverySuggestion;\n const primerError = new PrimerError(errorId, description || 'Unknown error', recoverySuggestion);\n primerSettings.onError(primerError, null, undefined);\n }\n });\n resolve();\n\n } catch (err) {\n reject(err);\n }\n });\n}\n\nexport interface PrimerHeadlessUniversalCheckoutRawDataManagerOptions {\n paymentMethodType: string;\n onMetadataChange?: (metadata: any) => void;\n onValidation?: (isValid: boolean, errors: PrimerError[] | undefined) => void;\n}\n\nclass PrimerHeadlessUniversalCheckoutRawDataManagerClass {\n\n ///////////////////////////////////////////\n // Init\n ///////////////////////////////////////////\n constructor() {\n\n }\n\n ///////////////////////////////////////////\n // API\n ///////////////////////////////////////////\n\n configure(options: PrimerHeadlessUniversalCheckoutRawDataManagerOptions): Promise<void> {\n primerHeadlessUniversalCheckoutRawDataManagerOptions = options;\n configureListeners();\n return RNPrimerHeadlessUniversalCheckoutRawDataManager.initialize(primerHeadlessUniversalCheckoutRawDataManagerOptions.paymentMethodType);\n }\n\n async getRequiredInputElementTypes(): Promise<string[]> {\n return new Promise(async (resolve, reject) => {\n if (\n primerHeadlessUniversalCheckoutRawDataManagerOptions &&\n primerHeadlessUniversalCheckoutRawDataManagerOptions.paymentMethodType\n ) {\n try {\n const inputElementTypes = await RNPrimerHeadlessUniversalCheckoutRawDataManager.listRequiredInputElementTypesForPaymentMethodType(primerHeadlessUniversalCheckoutRawDataManagerOptions.paymentMethodType);\n resolve(inputElementTypes);\n } catch (err) {\n reject(err);\n }\n } else {\n const err = new PrimerError(\"manager-not-configured\", \"HeadlessUniversalCheckoutRawDataManager has not been configured\", \"Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.\");\n reject(err);\n }\n })\n }\n\n setRawData(rawData: PrimerRawData): Promise<void> {\n return RNPrimerHeadlessUniversalCheckoutRawDataManager.setRawData(JSON.stringify(rawData));\n }\n\n submit(): Promise<void> {\n return RNPrimerHeadlessUniversalCheckoutRawDataManager.submit();\n }\n}\n\nexport const PrimerHeadlessUniversalCheckoutRawDataManager = new PrimerHeadlessUniversalCheckoutRawDataManagerClass();\n"]}
@@ -0,0 +1,76 @@
1
+ import { NativeEventEmitter, NativeModules } from 'react-native';
2
+ const {
3
+ PrimerHeadlessUniversalCheckoutRawDataManager
4
+ } = NativeModules;
5
+ const eventEmitter = new NativeEventEmitter(PrimerHeadlessUniversalCheckoutRawDataManager);
6
+ const eventTypes = ['onMetadataChange', 'onValidation', 'onNativeError'];
7
+ const RNPrimerHeadlessUniversalCheckoutRawDataManager = {
8
+ ///////////////////////////////////////////
9
+ // Event Emitter
10
+ ///////////////////////////////////////////
11
+ addListener: (eventType, listener) => {
12
+ eventEmitter.addListener(eventType, listener);
13
+ },
14
+ removeListener: (eventType, listener) => {
15
+ eventEmitter.removeListener(eventType, listener);
16
+ },
17
+
18
+ removeAllListenersForEvent(eventType) {
19
+ eventEmitter.removeAllListeners(eventType);
20
+ },
21
+
22
+ removeAllListeners() {
23
+ eventTypes.forEach(eventType => RNPrimerHeadlessUniversalCheckoutRawDataManager.removeAllListenersForEvent(eventType));
24
+ },
25
+
26
+ ///////////////////////////////////////////
27
+ // Native API
28
+ ///////////////////////////////////////////
29
+ initialize: paymentMethodType => {
30
+ return new Promise(async (resolve, reject) => {
31
+ try {
32
+ await PrimerHeadlessUniversalCheckoutRawDataManager.initialize(paymentMethodType);
33
+ resolve();
34
+ } catch (e) {
35
+ reject(e);
36
+ }
37
+ });
38
+ },
39
+ listRequiredInputElementTypesForPaymentMethodType: paymentMethodType => {
40
+ return new Promise(async (resolve, reject) => {
41
+ try {
42
+ const res = await PrimerHeadlessUniversalCheckoutRawDataManager.listRequiredInputElementTypesForPaymentMethodType(paymentMethodType);
43
+
44
+ if (res.inputElementTypes) {
45
+ resolve(res.inputElementTypes);
46
+ } else {
47
+ resolve([]);
48
+ }
49
+ } catch (e) {
50
+ reject(e);
51
+ }
52
+ });
53
+ },
54
+ setRawData: rawData => {
55
+ return new Promise(async (resolve, reject) => {
56
+ try {
57
+ await PrimerHeadlessUniversalCheckoutRawDataManager.setRawData(rawData);
58
+ resolve();
59
+ } catch (e) {
60
+ reject(e);
61
+ }
62
+ });
63
+ },
64
+ submit: () => {
65
+ return new Promise(async (resolve, reject) => {
66
+ try {
67
+ await PrimerHeadlessUniversalCheckoutRawDataManager.submit();
68
+ resolve();
69
+ } catch (e) {
70
+ reject(e);
71
+ }
72
+ });
73
+ }
74
+ };
75
+ export default RNPrimerHeadlessUniversalCheckoutRawDataManager;
76
+ //# sourceMappingURL=RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["RNPrimerHeadlessUniversalCheckoutRawDataManager.ts"],"names":["NativeEventEmitter","NativeModules","PrimerHeadlessUniversalCheckoutRawDataManager","eventEmitter","eventTypes","RNPrimerHeadlessUniversalCheckoutRawDataManager","addListener","eventType","listener","removeListener","removeAllListenersForEvent","removeAllListeners","forEach","initialize","paymentMethodType","Promise","resolve","reject","e","listRequiredInputElementTypesForPaymentMethodType","res","inputElementTypes","setRawData","rawData","submit"],"mappings":"AAAA,SAASA,kBAAT,EAA6BC,aAA7B,QAAkD,cAAlD;AAEA,MAAM;AAAEC,EAAAA;AAAF,IAAoDD,aAA1D;AACA,MAAME,YAAY,GAAG,IAAIH,kBAAJ,CAAuBE,6CAAvB,CAArB;AAOA,MAAME,UAAuB,GAAG,CAC5B,kBAD4B,EAE5B,cAF4B,EAG5B,eAH4B,CAAhC;AAMA,MAAMC,+CAA+C,GAAG;AAEpD;AACA;AACA;AACAC,EAAAA,WAAW,EAAE,CAACC,SAAD,EAAuBC,QAAvB,KAA6D;AACtEL,IAAAA,YAAY,CAACG,WAAb,CAAyBC,SAAzB,EAAoCC,QAApC;AACH,GAPmD;AASpDC,EAAAA,cAAc,EAAE,CAACF,SAAD,EAAuBC,QAAvB,KAA6D;AACzEL,IAAAA,YAAY,CAACM,cAAb,CAA4BF,SAA5B,EAAuCC,QAAvC;AACH,GAXmD;;AAapDE,EAAAA,0BAA0B,CAACH,SAAD,EAAuB;AAC7CJ,IAAAA,YAAY,CAACQ,kBAAb,CAAgCJ,SAAhC;AACH,GAfmD;;AAiBpDI,EAAAA,kBAAkB,GAAG;AACjBP,IAAAA,UAAU,CAACQ,OAAX,CAAoBL,SAAD,IAAeF,+CAA+C,CAACK,0BAAhD,CAA2EH,SAA3E,CAAlC;AACH,GAnBmD;;AAqBpD;AACA;AACA;AAEAM,EAAAA,UAAU,EAAGC,iBAAD,IAA8C;AACtD,WAAO,IAAIC,OAAJ,CAAY,OAAOC,OAAP,EAAgBC,MAAhB,KAA2B;AAC1C,UAAI;AACA,cAAMf,6CAA6C,CAACW,UAA9C,CAAyDC,iBAAzD,CAAN;AACAE,QAAAA,OAAO;AACV,OAHD,CAGE,OAAOE,CAAP,EAAU;AACRD,QAAAA,MAAM,CAACC,CAAD,CAAN;AACH;AACJ,KAPM,CAAP;AAQH,GAlCmD;AAoCpDC,EAAAA,iDAAiD,EAAGL,iBAAD,IAAkD;AACjG,WAAO,IAAIC,OAAJ,CAAY,OAAOC,OAAP,EAAgBC,MAAhB,KAA2B;AAC1C,UAAI;AACA,cAAMG,GAAG,GAAG,MAAMlB,6CAA6C,CAACiB,iDAA9C,CAAgGL,iBAAhG,CAAlB;;AACA,YAAIM,GAAG,CAACC,iBAAR,EAA2B;AACvBL,UAAAA,OAAO,CAACI,GAAG,CAACC,iBAAL,CAAP;AACH,SAFD,MAEO;AACHL,UAAAA,OAAO,CAAC,EAAD,CAAP;AACH;AACJ,OAPD,CAOE,OAAOE,CAAP,EAAU;AACRD,QAAAA,MAAM,CAACC,CAAD,CAAN;AACH;AACJ,KAXM,CAAP;AAYH,GAjDmD;AAmDpDI,EAAAA,UAAU,EAAGC,OAAD,IAAoC;AAC5C,WAAO,IAAIR,OAAJ,CAAY,OAAOC,OAAP,EAAgBC,MAAhB,KAA2B;AAC1C,UAAI;AACA,cAAMf,6CAA6C,CAACoB,UAA9C,CAAyDC,OAAzD,CAAN;AACAP,QAAAA,OAAO;AACV,OAHD,CAGE,OAAOE,CAAP,EAAU;AACRD,QAAAA,MAAM,CAACC,CAAD,CAAN;AACH;AACJ,KAPM,CAAP;AAQH,GA5DmD;AA8DpDM,EAAAA,MAAM,EAAE,MAAqB;AACzB,WAAO,IAAIT,OAAJ,CAAY,OAAOC,OAAP,EAAgBC,MAAhB,KAA2B;AAC1C,UAAI;AACA,cAAMf,6CAA6C,CAACsB,MAA9C,EAAN;AACAR,QAAAA,OAAO;AACV,OAHD,CAGE,OAAOE,CAAP,EAAU;AACRD,QAAAA,MAAM,CAACC,CAAD,CAAN;AACH;AACJ,KAPM,CAAP;AAQH;AAvEmD,CAAxD;AA0EA,eAAeb,+CAAf","sourcesContent":["import { NativeEventEmitter, NativeModules } from 'react-native';\n\nconst { PrimerHeadlessUniversalCheckoutRawDataManager } = NativeModules;\nconst eventEmitter = new NativeEventEmitter(PrimerHeadlessUniversalCheckoutRawDataManager);\n\ntype EventType =\n | 'onMetadataChange'\n | 'onValidation'\n | 'onNativeError';\n\nconst eventTypes: EventType[] = [\n 'onMetadataChange',\n 'onValidation',\n 'onNativeError'\n];\n\nconst RNPrimerHeadlessUniversalCheckoutRawDataManager = {\n\n ///////////////////////////////////////////\n // Event Emitter\n ///////////////////////////////////////////\n addListener: (eventType: EventType, listener: (...args: any[]) => any) => {\n eventEmitter.addListener(eventType, listener);\n },\n\n removeListener: (eventType: EventType, listener: (...args: any[]) => any) => {\n eventEmitter.removeListener(eventType, listener);\n },\n\n removeAllListenersForEvent(eventType: EventType) {\n eventEmitter.removeAllListeners(eventType);\n },\n\n removeAllListeners() {\n eventTypes.forEach((eventType) => RNPrimerHeadlessUniversalCheckoutRawDataManager.removeAllListenersForEvent(eventType));\n },\n\n ///////////////////////////////////////////\n // Native API\n ///////////////////////////////////////////\n\n initialize: (paymentMethodType: string): Promise<void> => {\n return new Promise(async (resolve, reject) => {\n try {\n await PrimerHeadlessUniversalCheckoutRawDataManager.initialize(paymentMethodType);\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n listRequiredInputElementTypesForPaymentMethodType: (paymentMethodType: string): Promise<string[]> => {\n return new Promise(async (resolve, reject) => {\n try {\n const res = await PrimerHeadlessUniversalCheckoutRawDataManager.listRequiredInputElementTypesForPaymentMethodType(paymentMethodType);\n if (res.inputElementTypes) {\n resolve(res.inputElementTypes);\n } else {\n resolve([])\n }\n } catch (e) {\n reject(e);\n }\n });\n },\n\n setRawData: (rawData: string): Promise<void> => {\n return new Promise(async (resolve, reject) => {\n try {\n await PrimerHeadlessUniversalCheckoutRawDataManager.setRawData(rawData);\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n submit: (): Promise<void> => {\n return new Promise(async (resolve, reject) => {\n try {\n await PrimerHeadlessUniversalCheckoutRawDataManager.submit();\n resolve();\n } catch (e) {\n reject(e);\n }\n });\n },\n}\n\nexport default RNPrimerHeadlessUniversalCheckoutRawDataManager;\n"]}
@@ -4,8 +4,10 @@ export { PrimerSessionIntent } from './models/PrimerSessionIntent';
4
4
  export { PrimerPaymentCreationHandler, PrimerTokenizationHandler, PrimerResumeHandler, PrimerErrorHandler } from './models/PrimerInterfaces';
5
5
  export { PrimerPaymentMethodTokenData } from './models/PrimerPaymentMethodTokenData';
6
6
  export { PrimerClientSession, PrimerOrder, PrimerLineItem, PrimerCustomer, PrimerAddress } from './models/PrimerClientSession';
7
+ export { PrimerRawData, PrimerRawCardData } from './models/PrimerRawData';
7
8
  export { PrimerCheckoutData, PrimerCheckoutDataPayment } from './models/PrimerCheckoutData';
8
9
  export { PrimerCheckoutPaymentMethodData } from './models/PrimerCheckoutPaymentMethodData';
9
10
  export { PrimerError } from './models/PrimerError';
10
- export { PrimerHeadlessUniversalCheckout } from './headless_checkout/PrimerHeadlessUniversalCheckout';
11
+ export { PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout } from './headless_checkout/PrimerHeadlessUniversalCheckout';
12
+ export { PrimerHeadlessUniversalCheckoutRawDataManager as HeadlessUniversalCheckoutRawDataManager } from './headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager';
11
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["Primer","PrimerSettings","PrimerSessionIntent","PrimerPaymentCreationHandler","PrimerTokenizationHandler","PrimerResumeHandler","PrimerErrorHandler","PrimerPaymentMethodTokenData","PrimerClientSession","PrimerOrder","PrimerLineItem","PrimerCustomer","PrimerAddress","PrimerCheckoutData","PrimerCheckoutDataPayment","PrimerCheckoutPaymentMethodData","PrimerError","PrimerHeadlessUniversalCheckout"],"mappings":"AAAA,SACIA,MADJ,QAEO,UAFP;AAGA,SACIC,cADJ,QAEO,yBAFP;AAGA,SACIC,mBADJ,QAEO,8BAFP;AAGA,SACIC,4BADJ,EAEIC,yBAFJ,EAGIC,mBAHJ,EAIIC,kBAJJ,QAKO,2BALP;AAMA,SAASC,4BAAT,QAA6C,uCAA7C;AACA,SACIC,mBADJ,EAEIC,WAFJ,EAGIC,cAHJ,EAIIC,cAJJ,EAKIC,aALJ,QAMO,8BANP;AAOA,SACIC,kBADJ,EAEIC,yBAFJ,QAGO,6BAHP;AAIA,SACIC,+BADJ,QAEO,0CAFP;AAGA,SACIC,WADJ,QAEO,sBAFP;AAGA,SACIC,+BADJ,QAEO,qDAFP","sourcesContent":["export {\n Primer\n} from './Primer';\nexport {\n PrimerSettings\n} from './models/PrimerSettings';\nexport {\n PrimerSessionIntent\n} from './models/PrimerSessionIntent';\nexport { \n PrimerPaymentCreationHandler,\n PrimerTokenizationHandler,\n PrimerResumeHandler,\n PrimerErrorHandler,\n} from './models/PrimerInterfaces';\nexport { PrimerPaymentMethodTokenData } from './models/PrimerPaymentMethodTokenData';\nexport { \n PrimerClientSession,\n PrimerOrder,\n PrimerLineItem,\n PrimerCustomer,\n PrimerAddress,\n} from './models/PrimerClientSession';\nexport { \n PrimerCheckoutData,\n PrimerCheckoutDataPayment,\n} from './models/PrimerCheckoutData';\nexport { \n PrimerCheckoutPaymentMethodData\n} from './models/PrimerCheckoutPaymentMethodData';\nexport { \n PrimerError\n} from './models/PrimerError';\nexport {\n PrimerHeadlessUniversalCheckout\n} from './headless_checkout/PrimerHeadlessUniversalCheckout';\n"]}
1
+ {"version":3,"sources":["index.tsx"],"names":["Primer","PrimerSettings","PrimerSessionIntent","PrimerPaymentCreationHandler","PrimerTokenizationHandler","PrimerResumeHandler","PrimerErrorHandler","PrimerPaymentMethodTokenData","PrimerClientSession","PrimerOrder","PrimerLineItem","PrimerCustomer","PrimerAddress","PrimerRawData","PrimerRawCardData","PrimerCheckoutData","PrimerCheckoutDataPayment","PrimerCheckoutPaymentMethodData","PrimerError","PrimerHeadlessUniversalCheckout","HeadlessUniversalCheckout","PrimerHeadlessUniversalCheckoutRawDataManager","HeadlessUniversalCheckoutRawDataManager"],"mappings":"AAAA,SACIA,MADJ,QAEO,UAFP;AAGA,SACIC,cADJ,QAEO,yBAFP;AAGA,SACIC,mBADJ,QAEO,8BAFP;AAGA,SACIC,4BADJ,EAEIC,yBAFJ,EAGIC,mBAHJ,EAIIC,kBAJJ,QAKO,2BALP;AAMA,SAASC,4BAAT,QAA6C,uCAA7C;AACA,SACIC,mBADJ,EAEIC,WAFJ,EAGIC,cAHJ,EAIIC,cAJJ,EAKIC,aALJ,QAMO,8BANP;AAOA,SACIC,aADJ,EAEIC,iBAFJ,QAGO,wBAHP;AAIA,SACIC,kBADJ,EAEIC,yBAFJ,QAGO,6BAHP;AAIA,SACIC,+BADJ,QAEO,0CAFP;AAGA,SACIC,WADJ,QAEO,sBAFP;AAGA,SACIC,+BAA+B,IAAIC,yBADvC,QAEO,qDAFP;AAGA,SACIC,6CAA6C,IAAIC,uCADrD,QAEO,mEAFP","sourcesContent":["export {\n Primer\n} from './Primer';\nexport {\n PrimerSettings\n} from './models/PrimerSettings';\nexport {\n PrimerSessionIntent\n} from './models/PrimerSessionIntent';\nexport { \n PrimerPaymentCreationHandler,\n PrimerTokenizationHandler,\n PrimerResumeHandler,\n PrimerErrorHandler,\n} from './models/PrimerInterfaces';\nexport { PrimerPaymentMethodTokenData } from './models/PrimerPaymentMethodTokenData';\nexport { \n PrimerClientSession,\n PrimerOrder,\n PrimerLineItem,\n PrimerCustomer,\n PrimerAddress,\n} from './models/PrimerClientSession';\nexport { \n PrimerRawData,\n PrimerRawCardData\n} from './models/PrimerRawData';\nexport { \n PrimerCheckoutData,\n PrimerCheckoutDataPayment,\n} from './models/PrimerCheckoutData';\nexport { \n PrimerCheckoutPaymentMethodData\n} from './models/PrimerCheckoutPaymentMethodData';\nexport { \n PrimerError\n} from './models/PrimerError';\nexport {\n PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout\n} from './headless_checkout/PrimerHeadlessUniversalCheckout';\nexport {\n PrimerHeadlessUniversalCheckoutRawDataManager as HeadlessUniversalCheckoutRawDataManager\n} from './headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager';\n"]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=PrimerRawData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
@@ -1,4 +1,5 @@
1
1
  import type { PrimerSettings } from '../models/PrimerSettings';
2
+ export declare let primerSettings: PrimerSettings | undefined;
2
3
  declare class PrimerHeadlessUniversalCheckoutClass {
3
4
  constructor();
4
5
  startWithClientToken(clientToken: string, settings: PrimerSettings): Promise<string[]>;
@@ -0,0 +1,16 @@
1
+ import type { PrimerRawData } from "..";
2
+ import { PrimerError } from '../models/PrimerError';
3
+ export interface PrimerHeadlessUniversalCheckoutRawDataManagerOptions {
4
+ paymentMethodType: string;
5
+ onMetadataChange?: (metadata: any) => void;
6
+ onValidation?: (isValid: boolean, errors: PrimerError[] | undefined) => void;
7
+ }
8
+ declare class PrimerHeadlessUniversalCheckoutRawDataManagerClass {
9
+ constructor();
10
+ configure(options: PrimerHeadlessUniversalCheckoutRawDataManagerOptions): Promise<void>;
11
+ getRequiredInputElementTypes(): Promise<string[]>;
12
+ setRawData(rawData: PrimerRawData): Promise<void>;
13
+ submit(): Promise<void>;
14
+ }
15
+ export declare const PrimerHeadlessUniversalCheckoutRawDataManager: PrimerHeadlessUniversalCheckoutRawDataManagerClass;
16
+ export {};
@@ -0,0 +1,12 @@
1
+ declare type EventType = 'onMetadataChange' | 'onValidation' | 'onNativeError';
2
+ declare const RNPrimerHeadlessUniversalCheckoutRawDataManager: {
3
+ addListener: (eventType: EventType, listener: (...args: any[]) => any) => void;
4
+ removeListener: (eventType: EventType, listener: (...args: any[]) => any) => void;
5
+ removeAllListenersForEvent(eventType: EventType): void;
6
+ removeAllListeners(): void;
7
+ initialize: (paymentMethodType: string) => Promise<void>;
8
+ listRequiredInputElementTypesForPaymentMethodType: (paymentMethodType: string) => Promise<string[]>;
9
+ setRawData: (rawData: string) => Promise<void>;
10
+ submit: () => Promise<void>;
11
+ };
12
+ export default RNPrimerHeadlessUniversalCheckoutRawDataManager;
@@ -4,7 +4,9 @@ export { PrimerSessionIntent } from './models/PrimerSessionIntent';
4
4
  export { PrimerPaymentCreationHandler, PrimerTokenizationHandler, PrimerResumeHandler, PrimerErrorHandler, } from './models/PrimerInterfaces';
5
5
  export { PrimerPaymentMethodTokenData } from './models/PrimerPaymentMethodTokenData';
6
6
  export { PrimerClientSession, PrimerOrder, PrimerLineItem, PrimerCustomer, PrimerAddress, } from './models/PrimerClientSession';
7
+ export { PrimerRawData, PrimerRawCardData } from './models/PrimerRawData';
7
8
  export { PrimerCheckoutData, PrimerCheckoutDataPayment, } from './models/PrimerCheckoutData';
8
9
  export { PrimerCheckoutPaymentMethodData } from './models/PrimerCheckoutPaymentMethodData';
9
10
  export { PrimerError } from './models/PrimerError';
10
- export { PrimerHeadlessUniversalCheckout } from './headless_checkout/PrimerHeadlessUniversalCheckout';
11
+ export { PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout } from './headless_checkout/PrimerHeadlessUniversalCheckout';
12
+ export { PrimerHeadlessUniversalCheckoutRawDataManager as HeadlessUniversalCheckoutRawDataManager } from './headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager';
@@ -0,0 +1,9 @@
1
+ export interface PrimerRawData {
2
+ }
3
+ export interface PrimerRawCardData extends PrimerRawData {
4
+ cardNumber: string;
5
+ expiryMonth: string;
6
+ expiryYear: string;
7
+ cvv: string;
8
+ cardholderName?: string;
9
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer-io/react-native",
3
- "version": "2.2.1",
3
+ "version": "2.5.0",
4
4
  "description": "Primer SDK for RN",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -17,5 +17,5 @@ Pod::Spec.new do |s|
17
17
  s.source_files = "ios/**/*.{h,m,mm,swift}"
18
18
 
19
19
  s.dependency "React-Core"
20
- s.dependency "PrimerSDK", "2.2.1"
20
+ s.dependency "PrimerSDK", "2.5.0"
21
21
  end
@@ -88,7 +88,7 @@ const paymentCreationHandler: PrimerPaymentCreationHandler = {
88
88
  }
89
89
  }
90
90
 
91
- let primerSettings: PrimerSettings | undefined = undefined;
91
+ export let primerSettings: PrimerSettings | undefined = undefined;
92
92
 
93
93
  async function configureListeners(): Promise<void> {
94
94
  return new Promise(async (resolve, reject) => {
@@ -177,7 +177,7 @@ async function configureListeners(): Promise<void> {
177
177
  if (primerSettings && primerSettings.onAvailablePaymentMethodsLoad) {
178
178
  if (data && data.paymentMethodTypes) {
179
179
  const paymentMethodTypes: string[] = data.paymentMethodTypes;
180
- const availablePaymentMethodTypes = paymentMethodTypes.filter(pmt => pmt !== 'PAYMENT_CARD');
180
+ const availablePaymentMethodTypes = paymentMethodTypes;
181
181
  primerSettings.onAvailablePaymentMethodsLoad(availablePaymentMethodTypes || ['not implemented']);
182
182
  } else {
183
183
  primerSettings.onAvailablePaymentMethodsLoad(['not implemented']);
@@ -280,7 +280,7 @@ class PrimerHeadlessUniversalCheckoutClass {
280
280
  try {
281
281
  await configureListeners();
282
282
  const hucResponse: PrimerHeadlessUniversalCheckoutStartResponse = await RNPrimerHeadlessUniversalCheckout.startWithClientToken(clientToken, settings);
283
- const availablePaymentMethodTypes: string[] = hucResponse.paymentMethodTypes.filter(pmt => pmt !== 'PAYMENT_CARD');
283
+ const availablePaymentMethodTypes: string[] = hucResponse.paymentMethodTypes;
284
284
  resolve(availablePaymentMethodTypes);
285
285
  } catch (err) {
286
286
  reject(err);
@@ -0,0 +1,104 @@
1
+ import type { PrimerRawData } from "..";
2
+ import RNPrimerHeadlessUniversalCheckoutRawDataManager from "./RNPrimerHeadlessUniversalCheckoutRawDataManager";
3
+ import { primerSettings } from "./PrimerHeadlessUniversalCheckout"
4
+ import { PrimerError } from '../models/PrimerError';
5
+
6
+ let primerHeadlessUniversalCheckoutRawDataManagerOptions: PrimerHeadlessUniversalCheckoutRawDataManagerOptions | undefined;
7
+
8
+ async function configureListeners(): Promise<void> {
9
+ return new Promise(async (resolve, reject) => {
10
+ try {
11
+ RNPrimerHeadlessUniversalCheckoutRawDataManager.removeAllListeners();
12
+
13
+ RNPrimerHeadlessUniversalCheckoutRawDataManager.addListener('onMetadataChange', data => {
14
+ if (primerHeadlessUniversalCheckoutRawDataManagerOptions && primerHeadlessUniversalCheckoutRawDataManagerOptions.onMetadataChange) {
15
+ primerHeadlessUniversalCheckoutRawDataManagerOptions.onMetadataChange(data);
16
+ }
17
+ });
18
+
19
+ RNPrimerHeadlessUniversalCheckoutRawDataManager.addListener('onValidation', data => {
20
+ if (primerHeadlessUniversalCheckoutRawDataManagerOptions && primerHeadlessUniversalCheckoutRawDataManagerOptions.onValidation) {
21
+ let errors: PrimerError[] = [];
22
+ for (const errData of (data.errors || [])) {
23
+ const errorId: string = errData.errorId;
24
+ const description: string | undefined = errData.description;
25
+ const recoverySuggestion: string | undefined = errData.recoverySuggestion;
26
+ const primerError = new PrimerError(errorId, description || 'Unknown error', recoverySuggestion);
27
+ errors.push(primerError);
28
+ }
29
+
30
+ primerHeadlessUniversalCheckoutRawDataManagerOptions.onValidation(data.isValid, errors.length === 0 ? undefined : errors);
31
+ }
32
+ });
33
+
34
+ RNPrimerHeadlessUniversalCheckoutRawDataManager.addListener('onNativeError', data => {
35
+ if (primerSettings && primerSettings.onError) {
36
+ const errorId: string = data.error.errorId;
37
+ const description: string | undefined = data.error.description;
38
+ const recoverySuggestion: string | undefined = data.error.recoverySuggestion;
39
+ const primerError = new PrimerError(errorId, description || 'Unknown error', recoverySuggestion);
40
+ primerSettings.onError(primerError, null, undefined);
41
+ }
42
+ });
43
+ resolve();
44
+
45
+ } catch (err) {
46
+ reject(err);
47
+ }
48
+ });
49
+ }
50
+
51
+ export interface PrimerHeadlessUniversalCheckoutRawDataManagerOptions {
52
+ paymentMethodType: string;
53
+ onMetadataChange?: (metadata: any) => void;
54
+ onValidation?: (isValid: boolean, errors: PrimerError[] | undefined) => void;
55
+ }
56
+
57
+ class PrimerHeadlessUniversalCheckoutRawDataManagerClass {
58
+
59
+ ///////////////////////////////////////////
60
+ // Init
61
+ ///////////////////////////////////////////
62
+ constructor() {
63
+
64
+ }
65
+
66
+ ///////////////////////////////////////////
67
+ // API
68
+ ///////////////////////////////////////////
69
+
70
+ configure(options: PrimerHeadlessUniversalCheckoutRawDataManagerOptions): Promise<void> {
71
+ primerHeadlessUniversalCheckoutRawDataManagerOptions = options;
72
+ configureListeners();
73
+ return RNPrimerHeadlessUniversalCheckoutRawDataManager.initialize(primerHeadlessUniversalCheckoutRawDataManagerOptions.paymentMethodType);
74
+ }
75
+
76
+ async getRequiredInputElementTypes(): Promise<string[]> {
77
+ return new Promise(async (resolve, reject) => {
78
+ if (
79
+ primerHeadlessUniversalCheckoutRawDataManagerOptions &&
80
+ primerHeadlessUniversalCheckoutRawDataManagerOptions.paymentMethodType
81
+ ) {
82
+ try {
83
+ const inputElementTypes = await RNPrimerHeadlessUniversalCheckoutRawDataManager.listRequiredInputElementTypesForPaymentMethodType(primerHeadlessUniversalCheckoutRawDataManagerOptions.paymentMethodType);
84
+ resolve(inputElementTypes);
85
+ } catch (err) {
86
+ reject(err);
87
+ }
88
+ } else {
89
+ const err = new PrimerError("manager-not-configured", "HeadlessUniversalCheckoutRawDataManager has not been configured", "Call HeadlessUniversalCheckoutRawDataManager.configure before calling this function.");
90
+ reject(err);
91
+ }
92
+ })
93
+ }
94
+
95
+ setRawData(rawData: PrimerRawData): Promise<void> {
96
+ return RNPrimerHeadlessUniversalCheckoutRawDataManager.setRawData(JSON.stringify(rawData));
97
+ }
98
+
99
+ submit(): Promise<void> {
100
+ return RNPrimerHeadlessUniversalCheckoutRawDataManager.submit();
101
+ }
102
+ }
103
+
104
+ export const PrimerHeadlessUniversalCheckoutRawDataManager = new PrimerHeadlessUniversalCheckoutRawDataManagerClass();
@@ -0,0 +1,91 @@
1
+ import { NativeEventEmitter, NativeModules } from 'react-native';
2
+
3
+ const { PrimerHeadlessUniversalCheckoutRawDataManager } = NativeModules;
4
+ const eventEmitter = new NativeEventEmitter(PrimerHeadlessUniversalCheckoutRawDataManager);
5
+
6
+ type EventType =
7
+ | 'onMetadataChange'
8
+ | 'onValidation'
9
+ | 'onNativeError';
10
+
11
+ const eventTypes: EventType[] = [
12
+ 'onMetadataChange',
13
+ 'onValidation',
14
+ 'onNativeError'
15
+ ];
16
+
17
+ const RNPrimerHeadlessUniversalCheckoutRawDataManager = {
18
+
19
+ ///////////////////////////////////////////
20
+ // Event Emitter
21
+ ///////////////////////////////////////////
22
+ addListener: (eventType: EventType, listener: (...args: any[]) => any) => {
23
+ eventEmitter.addListener(eventType, listener);
24
+ },
25
+
26
+ removeListener: (eventType: EventType, listener: (...args: any[]) => any) => {
27
+ eventEmitter.removeListener(eventType, listener);
28
+ },
29
+
30
+ removeAllListenersForEvent(eventType: EventType) {
31
+ eventEmitter.removeAllListeners(eventType);
32
+ },
33
+
34
+ removeAllListeners() {
35
+ eventTypes.forEach((eventType) => RNPrimerHeadlessUniversalCheckoutRawDataManager.removeAllListenersForEvent(eventType));
36
+ },
37
+
38
+ ///////////////////////////////////////////
39
+ // Native API
40
+ ///////////////////////////////////////////
41
+
42
+ initialize: (paymentMethodType: string): Promise<void> => {
43
+ return new Promise(async (resolve, reject) => {
44
+ try {
45
+ await PrimerHeadlessUniversalCheckoutRawDataManager.initialize(paymentMethodType);
46
+ resolve();
47
+ } catch (e) {
48
+ reject(e);
49
+ }
50
+ });
51
+ },
52
+
53
+ listRequiredInputElementTypesForPaymentMethodType: (paymentMethodType: string): Promise<string[]> => {
54
+ return new Promise(async (resolve, reject) => {
55
+ try {
56
+ const res = await PrimerHeadlessUniversalCheckoutRawDataManager.listRequiredInputElementTypesForPaymentMethodType(paymentMethodType);
57
+ if (res.inputElementTypes) {
58
+ resolve(res.inputElementTypes);
59
+ } else {
60
+ resolve([])
61
+ }
62
+ } catch (e) {
63
+ reject(e);
64
+ }
65
+ });
66
+ },
67
+
68
+ setRawData: (rawData: string): Promise<void> => {
69
+ return new Promise(async (resolve, reject) => {
70
+ try {
71
+ await PrimerHeadlessUniversalCheckoutRawDataManager.setRawData(rawData);
72
+ resolve();
73
+ } catch (e) {
74
+ reject(e);
75
+ }
76
+ });
77
+ },
78
+
79
+ submit: (): Promise<void> => {
80
+ return new Promise(async (resolve, reject) => {
81
+ try {
82
+ await PrimerHeadlessUniversalCheckoutRawDataManager.submit();
83
+ resolve();
84
+ } catch (e) {
85
+ reject(e);
86
+ }
87
+ });
88
+ },
89
+ }
90
+
91
+ export default RNPrimerHeadlessUniversalCheckoutRawDataManager;
package/src/index.tsx CHANGED
@@ -21,6 +21,10 @@ export {
21
21
  PrimerCustomer,
22
22
  PrimerAddress,
23
23
  } from './models/PrimerClientSession';
24
+ export {
25
+ PrimerRawData,
26
+ PrimerRawCardData
27
+ } from './models/PrimerRawData';
24
28
  export {
25
29
  PrimerCheckoutData,
26
30
  PrimerCheckoutDataPayment,
@@ -32,5 +36,8 @@ export {
32
36
  PrimerError
33
37
  } from './models/PrimerError';
34
38
  export {
35
- PrimerHeadlessUniversalCheckout
39
+ PrimerHeadlessUniversalCheckout as HeadlessUniversalCheckout
36
40
  } from './headless_checkout/PrimerHeadlessUniversalCheckout';
41
+ export {
42
+ PrimerHeadlessUniversalCheckoutRawDataManager as HeadlessUniversalCheckoutRawDataManager
43
+ } from './headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager';
@@ -0,0 +1,9 @@
1
+ export interface PrimerRawData {}
2
+
3
+ export interface PrimerRawCardData extends PrimerRawData {
4
+ cardNumber: string;
5
+ expiryMonth: string;
6
+ expiryYear: string;
7
+ cvv: string;
8
+ cardholderName?: string;
9
+ }