@primer-io/react-native 2.4.0 → 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.
- package/android/.project +11 -0
- package/android/.settings/org.eclipse.buildship.core.prefs +2 -2
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/primerioreactnative/PrimerRNHeadlessUniversalCheckout.kt +5 -5
- package/android/src/main/java/com/primerioreactnative/ReactNativePackage.kt +3 -1
- package/android/src/main/java/com/primerioreactnative/huc/datamodels/manager/raw/PrimerRNHeadlessCheckoutInputData.kt +22 -0
- package/android/src/main/java/com/primerioreactnative/huc/events/PrimerHeadlessUniversalCheckoutRawDataManagerEvent.kt +7 -0
- package/android/src/main/java/com/primerioreactnative/huc/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManager.kt +140 -0
- package/android/src/main/java/com/primerioreactnative/huc/manager/raw/PrimerRNHeadlessUniversalCheckoutRawManagerListener.kt +49 -0
- package/ios/DataModels/PrimerErrorRN.swift +2 -0
- package/ios/DataModels/RNTPrimerCardData.swift +46 -0
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckout.swift +53 -53
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutRawDataManager.m +21 -0
- package/ios/Headless Universal Checkout/RNTPrimerHeadlessUniversalCheckoutRawDataManager.swift +152 -0
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js +5 -4
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -1
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js +106 -0
- package/lib/commonjs/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js.map +1 -0
- package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js +85 -0
- package/lib/commonjs/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map +1 -0
- package/lib/commonjs/index.js +28 -6
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/PrimerRawData.js +2 -0
- package/lib/commonjs/models/PrimerRawData.js.map +1 -0
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js +3 -3
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckout.js.map +1 -1
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js +88 -0
- package/lib/module/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.js.map +1 -0
- package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js +76 -0
- package/lib/module/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.js.map +1 -0
- package/lib/module/index.js +3 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/PrimerRawData.js +2 -0
- package/lib/module/models/PrimerRawData.js.map +1 -0
- package/lib/typescript/src/headless_checkout/PrimerHeadlessUniversalCheckout.d.ts +1 -0
- package/lib/typescript/src/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.d.ts +16 -0
- package/lib/typescript/src/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.d.ts +12 -0
- package/lib/typescript/src/index.d.ts +3 -1
- package/lib/typescript/src/models/PrimerRawData.d.ts +9 -0
- package/package.json +1 -1
- package/primer-io-react-native.podspec +1 -1
- package/src/headless_checkout/PrimerHeadlessUniversalCheckout.ts +3 -3
- package/src/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.ts +104 -0
- package/src/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.ts +91 -0
- package/src/index.tsx +8 -1
- 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":"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","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"]}
|
package/lib/module/index.js
CHANGED
|
@@ -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
|
package/lib/module/index.js.map
CHANGED
|
@@ -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,+
|
|
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 @@
|
|
|
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[]>;
|
package/lib/typescript/src/headless_checkout/PrimerHeadlessUniversalCheckoutRawDataManager.d.ts
ADDED
|
@@ -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 {};
|
package/lib/typescript/src/headless_checkout/RNPrimerHeadlessUniversalCheckoutRawDataManager.d.ts
ADDED
|
@@ -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';
|
package/package.json
CHANGED
|
@@ -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
|
|
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
|
|
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';
|