@finos_sdk/sdk-ekyc 1.2.2 → 1.2.8

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 (86) hide show
  1. package/LICENSE +13 -10
  2. package/README.md +41 -42
  3. package/android/build.gradle +42 -11
  4. package/android/gradle.properties +7 -1
  5. package/android/settings.gradle +53 -0
  6. package/android/src/main/java/finos/sdk/ekyc/EKYCModule.kt +778 -81
  7. package/dist/EKYCModule.d.ts +72 -0
  8. package/dist/EKYCModule.js +650 -71
  9. package/dist/finos_sdk-sdk-ekyc-1.2.8.tgz +0 -0
  10. package/dist/index.d.ts +6 -1
  11. package/dist/index.js +5 -1
  12. package/dist/package.json +31 -21
  13. package/dist/src/modules/FinosEKYCModule.d.ts +144 -0
  14. package/dist/src/modules/FinosEKYCModule.js +468 -2
  15. package/dist/src/modules/FinosESignModule.d.ts +270 -0
  16. package/dist/src/modules/FinosESignModule.js +752 -0
  17. package/dist/src/types/ekycESignType.d.ts +67 -0
  18. package/dist/src/types/ekycESignType.js +2 -0
  19. package/dist/src/types/ekycSmsOtpType.d.ts +52 -0
  20. package/dist/src/types/ekycSmsOtpType.js +2 -0
  21. package/package.json +31 -21
  22. package/src/modules/FinosEKYCModule.ts +554 -2
  23. package/src/modules/FinosESignModule.ts +919 -0
  24. package/src/modules/README.md +3 -3
  25. package/src/types/ekycESignType.ts +76 -0
  26. package/src/types/ekycSmsOtpType.ts +59 -0
  27. package/android/SDKeKYC/finos/sdk/ekyc/c06/1.2.2/c06-1.2.2-sources.jar +0 -0
  28. package/android/SDKeKYC/finos/sdk/ekyc/c06/1.2.2/c06-1.2.2.aar +0 -0
  29. package/android/SDKeKYC/finos/sdk/ekyc/c06/1.2.2/c06-1.2.2.module +0 -110
  30. package/android/SDKeKYC/finos/sdk/ekyc/c06/1.2.2/c06-1.2.2.pom +0 -37
  31. package/android/SDKeKYC/finos/sdk/ekyc/c06/maven-metadata-local.xml +0 -13
  32. package/android/SDKeKYC/finos/sdk/ekyc/ekyc/1.2.2/ekyc-1.2.2-sources.jar +0 -0
  33. package/android/SDKeKYC/finos/sdk/ekyc/ekyc/1.2.2/ekyc-1.2.2.aar +0 -0
  34. package/android/SDKeKYC/finos/sdk/ekyc/ekyc/1.2.2/ekyc-1.2.2.module +0 -201
  35. package/android/SDKeKYC/finos/sdk/ekyc/ekyc/1.2.2/ekyc-1.2.2.pom +0 -73
  36. package/android/SDKeKYC/finos/sdk/ekyc/ekyc/maven-metadata-local.xml +0 -13
  37. package/android/SDKeKYC/finos/sdk/ekyc/ekycui/1.2.2/ekycui-1.2.2-sources.jar +0 -0
  38. package/android/SDKeKYC/finos/sdk/ekyc/ekycui/1.2.2/ekycui-1.2.2.aar +0 -0
  39. package/android/SDKeKYC/finos/sdk/ekyc/ekycui/1.2.2/ekycui-1.2.2.module +0 -131
  40. package/android/SDKeKYC/finos/sdk/ekyc/ekycui/1.2.2/ekycui-1.2.2.pom +0 -43
  41. package/android/SDKeKYC/finos/sdk/ekyc/ekycui/maven-metadata-local.xml +0 -13
  42. package/android/SDKeKYC/finos/sdk/ekyc/faceservice/1.2.2/faceservice-1.2.2-sources.jar +0 -0
  43. package/android/SDKeKYC/finos/sdk/ekyc/faceservice/1.2.2/faceservice-1.2.2.aar +0 -0
  44. package/android/SDKeKYC/finos/sdk/ekyc/faceservice/1.2.2/faceservice-1.2.2.module +0 -110
  45. package/android/SDKeKYC/finos/sdk/ekyc/faceservice/1.2.2/faceservice-1.2.2.pom +0 -37
  46. package/android/SDKeKYC/finos/sdk/ekyc/faceservice/maven-metadata-local.xml +0 -13
  47. package/android/SDKeKYC/finos/sdk/ekyc/liveness/1.2.2/liveness-1.2.2-sources.jar +0 -0
  48. package/android/SDKeKYC/finos/sdk/ekyc/liveness/1.2.2/liveness-1.2.2.aar +0 -0
  49. package/android/SDKeKYC/finos/sdk/ekyc/liveness/1.2.2/liveness-1.2.2.module +0 -138
  50. package/android/SDKeKYC/finos/sdk/ekyc/liveness/1.2.2/liveness-1.2.2.pom +0 -55
  51. package/android/SDKeKYC/finos/sdk/ekyc/liveness/maven-metadata-local.xml +0 -13
  52. package/android/SDKeKYC/finos/sdk/ekyc/nfc/1.2.2/nfc-1.2.2-sources.jar +0 -0
  53. package/android/SDKeKYC/finos/sdk/ekyc/nfc/1.2.2/nfc-1.2.2.aar +0 -0
  54. package/android/SDKeKYC/finos/sdk/ekyc/nfc/1.2.2/nfc-1.2.2.module +0 -131
  55. package/android/SDKeKYC/finos/sdk/ekyc/nfc/1.2.2/nfc-1.2.2.pom +0 -55
  56. package/android/SDKeKYC/finos/sdk/ekyc/nfc/maven-metadata-local.xml +0 -13
  57. package/android/SDKeKYC/finos/sdk/ekyc/ocr/1.2.2/ocr-1.2.2-sources.jar +0 -0
  58. package/android/SDKeKYC/finos/sdk/ekyc/ocr/1.2.2/ocr-1.2.2.aar +0 -0
  59. package/android/SDKeKYC/finos/sdk/ekyc/ocr/1.2.2/ocr-1.2.2.module +0 -124
  60. package/android/SDKeKYC/finos/sdk/ekyc/ocr/1.2.2/ocr-1.2.2.pom +0 -43
  61. package/android/SDKeKYC/finos/sdk/ekyc/ocr/maven-metadata-local.xml +0 -13
  62. package/android/SDKeKYC/finos/sdk/ekyc/qrcode/1.2.2/qrcode-1.2.2-sources.jar +0 -0
  63. package/android/SDKeKYC/finos/sdk/ekyc/qrcode/1.2.2/qrcode-1.2.2.aar +0 -0
  64. package/android/SDKeKYC/finos/sdk/ekyc/qrcode/1.2.2/qrcode-1.2.2.module +0 -138
  65. package/android/SDKeKYC/finos/sdk/ekyc/qrcode/1.2.2/qrcode-1.2.2.pom +0 -55
  66. package/android/SDKeKYC/finos/sdk/ekyc/qrcode/maven-metadata-local.xml +0 -13
  67. package/android/SDKeKYC/finos/sdk/ekyc/sdkcore/1.2.2/sdkcore-1.2.2-sources.jar +0 -0
  68. package/android/SDKeKYC/finos/sdk/ekyc/sdkcore/1.2.2/sdkcore-1.2.2.aar +0 -0
  69. package/android/SDKeKYC/finos/sdk/ekyc/sdkcore/1.2.2/sdkcore-1.2.2.module +0 -341
  70. package/android/SDKeKYC/finos/sdk/ekyc/sdkcore/1.2.2/sdkcore-1.2.2.pom +0 -139
  71. package/android/SDKeKYC/finos/sdk/ekyc/sdkcore/maven-metadata-local.xml +0 -13
  72. package/android/SDKeKYC/finos/sdk/ekyc/sdkcorecamera/1.2.2/sdkcorecamera-1.2.2-sources.jar +0 -0
  73. package/android/SDKeKYC/finos/sdk/ekyc/sdkcorecamera/1.2.2/sdkcorecamera-1.2.2.aar +0 -0
  74. package/android/SDKeKYC/finos/sdk/ekyc/sdkcorecamera/1.2.2/sdkcorecamera-1.2.2.module +0 -201
  75. package/android/SDKeKYC/finos/sdk/ekyc/sdkcorecamera/1.2.2/sdkcorecamera-1.2.2.pom +0 -85
  76. package/android/SDKeKYC/finos/sdk/ekyc/sdkcorecamera/maven-metadata-local.xml +0 -13
  77. package/android/SDKeKYC/finos/sdk/ekyc/sdkui/1.2.2/sdkui-1.2.2-sources.jar +0 -0
  78. package/android/SDKeKYC/finos/sdk/ekyc/sdkui/1.2.2/sdkui-1.2.2.aar +0 -0
  79. package/android/SDKeKYC/finos/sdk/ekyc/sdkui/1.2.2/sdkui-1.2.2.module +0 -208
  80. package/android/SDKeKYC/finos/sdk/ekyc/sdkui/1.2.2/sdkui-1.2.2.pom +0 -103
  81. package/android/SDKeKYC/finos/sdk/ekyc/sdkui/maven-metadata-local.xml +0 -13
  82. package/android/src/main/AndroidManifest.xml +0 -22
  83. package/android/src/main/build.gradle +0 -31
  84. package/dist/App.d.ts +0 -3
  85. package/dist/App.js +0 -497
  86. package/dist/finos_sdk-sdk-ekyc-1.2.2.tgz +0 -0
@@ -9,10 +9,10 @@ const react_native_1 = require("react-native");
9
9
  const package_json_1 = __importDefault(require("./package.json"));
10
10
  exports.SDK_VERSION = package_json_1.default.version;
11
11
  exports.SDK_NAME = package_json_1.default.name;
12
- const EKYCNativeModule = react_native_1.NativeModules.EKYCModule;
13
- // Validate that the module is available
12
+ const EKYCNativeModule = react_native_1.NativeModules.EKYCModule || null;
13
+ // Validate that the module is available - but don't throw, just warn
14
14
  if (!EKYCNativeModule) {
15
- throw new Error('EKYCModule is not available. This is likely an autolinking issue.\n' +
15
+ console.error('EKYCModule is not available. This is likely an autolinking issue.\n' +
16
16
  'Please try:\n' +
17
17
  '1. Clean and rebuild your app:\n' +
18
18
  ' - rm -rf android/app/build android/build\n' +
@@ -21,35 +21,62 @@ if (!EKYCNativeModule) {
21
21
  '2. If using manual linking, remove it and rely on autolinking\n' +
22
22
  '3. Ensure you have the latest version: npm install @finos_sdk/sdk-ekyc@latest');
23
23
  }
24
- // Initialize the module with Koin error handling
25
- try {
26
- EKYCNativeModule.initSdkEkyc()
27
- .then(() => console.log("✅ EKYCModule.initSdkEkyc called successfully"))
28
- .catch(e => {
24
+ else {
25
+ console.log('✅ Native module loaded');
26
+ // Initialize the module with Koin error handling
27
+ try {
28
+ EKYCNativeModule.initSdkEkyc()
29
+ .then(() => {
30
+ console.log("✅ SDK initialized");
31
+ })
32
+ .catch(e => {
33
+ if (e && e.toString().includes('Koin Application has already been started')) {
34
+ console.log("✅ SDK already initialized");
35
+ }
36
+ else {
37
+ console.warn("❌ Failed to initialize SDK:", e);
38
+ }
39
+ });
40
+ }
41
+ catch (e) {
29
42
  if (e && e.toString().includes('Koin Application has already been started')) {
30
- console.log("✅ SDK already initialized (Koin Application started)");
43
+ console.log("✅ SDK already initialized");
31
44
  }
32
45
  else {
33
- console.warn("❌ Failed to initialize SDK EKYC:", e);
46
+ console.warn("❌ Exception when initializing SDK:", e);
34
47
  }
35
- });
36
- }
37
- catch (e) {
38
- if (e && e.toString().includes('Koin Application has already been started')) {
39
- console.log("✅ SDK already initialized (Koin Application started)");
40
- }
41
- else {
42
- console.warn("❌ Exception when calling initSdkEkyc:", e);
43
48
  }
44
49
  }
45
50
  class SDKeKYC {
46
51
  constructor() {
52
+ this.eventEmitter = null;
47
53
  this.listeners = [];
48
54
  this.isInitialized = false;
49
- this.eventEmitter = new react_native_1.NativeEventEmitter(EKYCNativeModule);
55
+ // Lazy initialization of event emitter to ensure native module is ready
56
+ }
57
+ // Ensure event emitter is initialized
58
+ ensureEventEmitter() {
59
+ if (!this.eventEmitter) {
60
+ if (!EKYCNativeModule) {
61
+ console.error('❌ EKYCModule native module is not available');
62
+ return null;
63
+ }
64
+ try {
65
+ this.eventEmitter = new react_native_1.NativeEventEmitter(EKYCNativeModule);
66
+ }
67
+ catch (error) {
68
+ console.error('❌ Failed to create NativeEventEmitter:', error);
69
+ return null;
70
+ }
71
+ }
72
+ return this.eventEmitter;
50
73
  }
51
74
  // SDK Information methods
52
75
  async getVersion() {
76
+ if (!EKYCNativeModule) {
77
+ console.warn('⚠️ EKYCModule not available, returning fallback version');
78
+ return exports.SDK_VERSION;
79
+ }
53
80
  try {
54
81
  return await EKYCNativeModule.getVersion();
55
82
  }
@@ -59,6 +86,14 @@ class SDKeKYC {
59
86
  }
60
87
  }
61
88
  async getSDKInfo() {
89
+ if (!EKYCNativeModule) {
90
+ console.warn('⚠️ EKYCModule not available, returning fallback info');
91
+ return {
92
+ name: exports.SDK_NAME,
93
+ version: exports.SDK_VERSION,
94
+ buildNumber: '1'
95
+ };
96
+ }
62
97
  try {
63
98
  return await EKYCNativeModule.getSDKInfo();
64
99
  }
@@ -73,6 +108,11 @@ class SDKeKYC {
73
108
  }
74
109
  // Initialize SDK with better error handling
75
110
  async initSdkEkyc() {
111
+ if (!EKYCNativeModule) {
112
+ const error = 'EKYCModule native module is not available. Please check autolinking.';
113
+ console.error('❌', error);
114
+ throw new Error(error);
115
+ }
76
116
  try {
77
117
  const result = await EKYCNativeModule.initSdkEkyc();
78
118
  this.isInitialized = true;
@@ -94,8 +134,16 @@ class SDKeKYC {
94
134
  isSDKInitialized() {
95
135
  return this.isInitialized;
96
136
  }
137
+ // Validate native module is available
138
+ ensureNativeModule() {
139
+ if (!EKYCNativeModule) {
140
+ throw new Error('EKYCModule native module is not available. Please check autolinking.');
141
+ }
142
+ return EKYCNativeModule;
143
+ }
97
144
  // Validate configuration before calling native methods
98
145
  validateConfig(config, requiredFields) {
146
+ this.ensureNativeModule(); // Check native module first
99
147
  if (!this.isInitialized) {
100
148
  throw new Error('SDK is not initialized. Please call initSdkEkyc() first.');
101
149
  }
@@ -108,8 +156,9 @@ class SDKeKYC {
108
156
  async startOcr(config) {
109
157
  var _a;
110
158
  this.validateConfig(config, ['appKey', 'idImagePath', 'expectedDocumentSide', 'transactionId']);
159
+ const nativeModule = this.ensureNativeModule();
111
160
  try {
112
- return await EKYCNativeModule.startOcr(config.appKey, config.idImagePath, config.expectedDocumentSide, (_a = config.transactionId) !== null && _a !== void 0 ? _a : '');
161
+ return await nativeModule.startOcr(config.appKey, config.idImagePath, config.expectedDocumentSide, (_a = config.transactionId) !== null && _a !== void 0 ? _a : '');
113
162
  }
114
163
  catch (error) {
115
164
  console.error('OCR Error:', error);
@@ -119,8 +168,9 @@ class SDKeKYC {
119
168
  // Start NFC scanning
120
169
  async startNfcScan(config) {
121
170
  this.validateConfig(config, ['appKey', 'documentNumber', 'birthDate', 'expireDate']);
171
+ const nativeModule = this.ensureNativeModule();
122
172
  try {
123
- return await EKYCNativeModule.startNfcScan(config.appKey, config.documentNumber, config.birthDate, config.expireDate, config.transactionId, config.facePathStorage);
173
+ return await nativeModule.startNfcScan(config.appKey, config.documentNumber, config.birthDate, config.expireDate, config.transactionId, config.facePathStorage);
124
174
  }
125
175
  catch (error) {
126
176
  console.error('NFC Scan Error:', error);
@@ -131,8 +181,9 @@ class SDKeKYC {
131
181
  async checkC06(config) {
132
182
  var _a, _b;
133
183
  this.validateConfig(config, ['appKey', 'sod', 'idCardNumber', 'recentLocation']);
184
+ const nativeModule = this.ensureNativeModule();
134
185
  try {
135
- return await EKYCNativeModule.checkC06(config.appKey, config.sod, config.idCardNumber, (_a = config.recentLocation) !== null && _a !== void 0 ? _a : '', (_b = config.transactionId) !== null && _b !== void 0 ? _b : '');
186
+ return await nativeModule.checkC06(config.appKey, config.sod, config.idCardNumber, (_a = config.recentLocation) !== null && _a !== void 0 ? _a : '', (_b = config.transactionId) !== null && _b !== void 0 ? _b : '');
136
187
  }
137
188
  catch (error) {
138
189
  console.error('C06 Check Error:', error);
@@ -142,8 +193,9 @@ class SDKeKYC {
142
193
  async startLiveness(config) {
143
194
  var _a;
144
195
  this.validateConfig(config, ['appKey', 'selfieImage', 'transactionId']);
196
+ const nativeModule = this.ensureNativeModule();
145
197
  try {
146
- return await EKYCNativeModule.startLiveness(config.appKey, config.selfieImage, config.usingRandomAction, (_a = config.transactionId) !== null && _a !== void 0 ? _a : '', config.isStraight, config.switchFrontCamera);
198
+ return await nativeModule.startLiveness(config.appKey, config.selfieImage, config.usingRandomAction, (_a = config.transactionId) !== null && _a !== void 0 ? _a : '', config.isStraight, config.switchFrontCamera !== undefined ? config.switchFrontCamera : false);
147
199
  }
148
200
  catch (error) {
149
201
  console.error('Liveness Error:', error);
@@ -153,8 +205,9 @@ class SDKeKYC {
153
205
  async startFaceCompare(config) {
154
206
  var _a;
155
207
  this.validateConfig(config, ['appKey', 'selfieImage', 'idImage']);
208
+ const nativeModule = this.ensureNativeModule();
156
209
  try {
157
- return await EKYCNativeModule.startFaceCompare(config.appKey, (_a = config.transactionId) !== null && _a !== void 0 ? _a : '', config.selfieImage, config.idImage);
210
+ return await nativeModule.startFaceCompare(config.appKey, (_a = config.transactionId) !== null && _a !== void 0 ? _a : '', config.selfieImage, config.idImage);
158
211
  }
159
212
  catch (error) {
160
213
  console.error('Face Compare Error:', error);
@@ -163,94 +216,619 @@ class SDKeKYC {
163
216
  }
164
217
  // Lifecycle methods
165
218
  onResume() {
166
- EKYCNativeModule.onResume();
219
+ const nativeModule = this.ensureNativeModule();
220
+ nativeModule.onResume();
167
221
  }
168
222
  onPause() {
169
- EKYCNativeModule.onPause();
223
+ const nativeModule = this.ensureNativeModule();
224
+ nativeModule.onPause();
170
225
  }
171
226
  // Event listeners
172
227
  onNfcScanStart(callback) {
173
- if (!this.eventEmitter)
228
+ try {
229
+ const emitter = this.ensureEventEmitter();
230
+ if (!emitter) {
231
+ console.error('❌ Event emitter not available for onNfcScanStart');
232
+ return null;
233
+ }
234
+ const listener = emitter.addListener('onNfcScanStart', callback);
235
+ this.listeners.push(listener);
236
+ return listener;
237
+ }
238
+ catch (error) {
239
+ console.error('Failed to add onNfcScanStart listener:', error);
174
240
  return null;
175
- const listener = this.eventEmitter.addListener('onNfcScanStart', callback);
176
- this.listeners.push(listener);
177
- return listener;
241
+ }
178
242
  }
179
243
  onNfcScanSuccess(callback) {
180
- if (!this.eventEmitter)
244
+ try {
245
+ const emitter = this.ensureEventEmitter();
246
+ if (!emitter) {
247
+ console.error('❌ Event emitter not available for onNfcScanSuccess');
248
+ return null;
249
+ }
250
+ const listener = emitter.addListener('onNfcScanSuccess', callback);
251
+ this.listeners.push(listener);
252
+ return listener;
253
+ }
254
+ catch (error) {
255
+ console.error('Failed to add onNfcScanSuccess listener:', error);
181
256
  return null;
182
- const listener = this.eventEmitter.addListener('onNfcScanSuccess', callback);
183
- this.listeners.push(listener);
184
- return listener;
257
+ }
185
258
  }
186
259
  onNfcError(callback) {
187
- if (!this.eventEmitter)
260
+ try {
261
+ const emitter = this.ensureEventEmitter();
262
+ if (!emitter) {
263
+ console.error('❌ Event emitter not available for onNfcError');
264
+ return null;
265
+ }
266
+ const listener = emitter.addListener('onNfcError', callback);
267
+ this.listeners.push(listener);
268
+ return listener;
269
+ }
270
+ catch (error) {
271
+ console.error('Failed to add onNfcError listener:', error);
188
272
  return null;
189
- const listener = this.eventEmitter.addListener('onNfcError', callback);
190
- this.listeners.push(listener);
191
- return listener;
273
+ }
192
274
  }
193
275
  onC06Success(callback) {
194
- if (!this.eventEmitter)
276
+ try {
277
+ const emitter = this.ensureEventEmitter();
278
+ if (!emitter) {
279
+ console.error('❌ Event emitter not available for onC06Success');
280
+ return null;
281
+ }
282
+ const listener = emitter.addListener('onC06Success', callback);
283
+ this.listeners.push(listener);
284
+ return listener;
285
+ }
286
+ catch (error) {
287
+ console.error('Failed to add onC06Success listener:', error);
195
288
  return null;
196
- const listener = this.eventEmitter.addListener('onC06Success', callback);
197
- this.listeners.push(listener);
198
- return listener;
289
+ }
199
290
  }
200
291
  onC06Error(callback) {
201
- if (!this.eventEmitter)
292
+ try {
293
+ const emitter = this.ensureEventEmitter();
294
+ if (!emitter) {
295
+ console.error('❌ Event emitter not available for onC06Error');
296
+ return null;
297
+ }
298
+ const listener = emitter.addListener('onC06Error', callback);
299
+ this.listeners.push(listener);
300
+ return listener;
301
+ }
302
+ catch (error) {
303
+ console.error('Failed to add onC06Error listener:', error);
202
304
  return null;
203
- const listener = this.eventEmitter.addListener('onC06Error', callback);
204
- this.listeners.push(listener);
205
- return listener;
305
+ }
206
306
  }
207
307
  // Additional listeners (native emits these):
208
308
  onOcrSuccess(callback) {
209
- if (!this.eventEmitter)
309
+ try {
310
+ const emitter = this.ensureEventEmitter();
311
+ if (!emitter) {
312
+ console.error('❌ Event emitter not available for onOcrSuccess');
313
+ return null;
314
+ }
315
+ const listener = emitter.addListener('onOcrSuccess', callback);
316
+ this.listeners.push(listener);
317
+ return listener;
318
+ }
319
+ catch (error) {
320
+ console.error('Failed to add onOcrSuccess listener:', error);
210
321
  return null;
211
- const listener = this.eventEmitter.addListener('onOcrSuccess', callback);
212
- this.listeners.push(listener);
213
- return listener;
322
+ }
214
323
  }
215
324
  onOcrError(callback) {
216
- if (!this.eventEmitter)
325
+ try {
326
+ const emitter = this.ensureEventEmitter();
327
+ if (!emitter) {
328
+ console.error('❌ Event emitter not available for onOcrError');
329
+ return null;
330
+ }
331
+ const listener = emitter.addListener('onOcrError', callback);
332
+ this.listeners.push(listener);
333
+ return listener;
334
+ }
335
+ catch (error) {
336
+ console.error('Failed to add onOcrError listener:', error);
217
337
  return null;
218
- const listener = this.eventEmitter.addListener('onOcrError', callback);
219
- this.listeners.push(listener);
220
- return listener;
338
+ }
221
339
  }
222
340
  onLivenessSuccess(callback) {
223
- if (!this.eventEmitter)
341
+ try {
342
+ const emitter = this.ensureEventEmitter();
343
+ if (!emitter) {
344
+ console.error('❌ Event emitter not available for onLivenessSuccess');
345
+ return null;
346
+ }
347
+ const listener = emitter.addListener('onLivenessSuccess', callback);
348
+ this.listeners.push(listener);
349
+ return listener;
350
+ }
351
+ catch (error) {
352
+ console.error('Failed to add onLivenessSuccess listener:', error);
224
353
  return null;
225
- const listener = this.eventEmitter.addListener('onLivenessSuccess', callback);
226
- this.listeners.push(listener);
227
- return listener;
354
+ }
228
355
  }
229
356
  onLivenessError(callback) {
230
- if (!this.eventEmitter)
357
+ try {
358
+ const emitter = this.ensureEventEmitter();
359
+ if (!emitter) {
360
+ console.error('❌ Event emitter not available for onLivenessError');
361
+ return null;
362
+ }
363
+ const listener = emitter.addListener('onLivenessError', callback);
364
+ this.listeners.push(listener);
365
+ return listener;
366
+ }
367
+ catch (error) {
368
+ console.error('Failed to add onLivenessError listener:', error);
231
369
  return null;
232
- const listener = this.eventEmitter.addListener('onLivenessError', callback);
233
- this.listeners.push(listener);
234
- return listener;
370
+ }
235
371
  }
236
372
  onFaceCompareSuccess(callback) {
237
- if (!this.eventEmitter)
373
+ try {
374
+ const emitter = this.ensureEventEmitter();
375
+ if (!emitter) {
376
+ console.error('❌ Event emitter not available for onFaceCompareSuccess');
377
+ return null;
378
+ }
379
+ const listener = emitter.addListener('onFaceCompareSuccess', callback);
380
+ this.listeners.push(listener);
381
+ return listener;
382
+ }
383
+ catch (error) {
384
+ console.error('Failed to add onFaceCompareSuccess listener:', error);
238
385
  return null;
239
- const listener = this.eventEmitter.addListener('onFaceCompareSuccess', callback);
240
- this.listeners.push(listener);
241
- return listener;
386
+ }
242
387
  }
243
388
  onFaceCompareError(callback) {
244
- if (!this.eventEmitter)
389
+ try {
390
+ const emitter = this.ensureEventEmitter();
391
+ if (!emitter) {
392
+ console.error('❌ Event emitter not available for onFaceCompareError');
393
+ return null;
394
+ }
395
+ const listener = emitter.addListener('onFaceCompareError', callback);
396
+ this.listeners.push(listener);
397
+ return listener;
398
+ }
399
+ catch (error) {
400
+ console.error('Failed to add onFaceCompareError listener:', error);
245
401
  return null;
246
- const listener = this.eventEmitter.addListener('onFaceCompareError', callback);
247
- this.listeners.push(listener);
248
- return listener;
402
+ }
249
403
  }
250
404
  removeAllListeners() {
251
405
  this.listeners.forEach(listener => listener.remove());
252
406
  this.listeners = [];
253
407
  }
408
+ // ==================== SMS OTP Methods ====================
409
+ async sendOtp(config) {
410
+ this.validateConfig(config, ['phoneNumber', 'referenceId']);
411
+ const nativeModule = this.ensureNativeModule();
412
+ try {
413
+ const result = await nativeModule.sendOtp(config.phoneNumber, config.purpose || null, config.referenceId);
414
+ return result;
415
+ }
416
+ catch (error) {
417
+ console.error('SMS OTP Send Error:', error);
418
+ throw error;
419
+ }
420
+ }
421
+ async verifyOtp(config, otpCode) {
422
+ if (!config.requestId) {
423
+ throw new Error('requestId is required for verifyOtp');
424
+ }
425
+ this.validateConfig(config, ['phoneNumber', 'referenceId', 'requestId']);
426
+ const nativeModule = this.ensureNativeModule();
427
+ try {
428
+ const result = await nativeModule.verifyOtp(config.phoneNumber, config.purpose || null, config.referenceId, config.requestId, otpCode);
429
+ return result;
430
+ }
431
+ catch (error) {
432
+ console.error('SMS OTP Verify Error:', error);
433
+ throw error;
434
+ }
435
+ }
436
+ async resendOtp(config) {
437
+ if (!config.requestId) {
438
+ throw new Error('requestId is required for resendOtp');
439
+ }
440
+ this.validateConfig(config, ['phoneNumber', 'referenceId', 'requestId']);
441
+ const nativeModule = this.ensureNativeModule();
442
+ try {
443
+ const result = await nativeModule.resendOtp(config.phoneNumber, config.purpose || null, config.referenceId, config.requestId);
444
+ return result;
445
+ }
446
+ catch (error) {
447
+ console.error('SMS OTP Resend Error:', error);
448
+ throw error;
449
+ }
450
+ }
451
+ // SMS OTP Event Listeners
452
+ onSmsOtpSendSuccess(callback) {
453
+ try {
454
+ const emitter = this.ensureEventEmitter();
455
+ if (!emitter) {
456
+ console.error('❌ Event emitter not available for onSmsOtpSendSuccess');
457
+ return null;
458
+ }
459
+ const listener = emitter.addListener('onSmsOtpSendSuccess', callback);
460
+ this.listeners.push(listener);
461
+ return listener;
462
+ }
463
+ catch (error) {
464
+ console.error('Failed to add onSmsOtpSendSuccess listener:', error);
465
+ return null;
466
+ }
467
+ }
468
+ onSmsOtpVerifySuccess(callback) {
469
+ try {
470
+ const emitter = this.ensureEventEmitter();
471
+ if (!emitter) {
472
+ console.error('❌ Event emitter not available for onSmsOtpVerifySuccess');
473
+ return null;
474
+ }
475
+ const listener = emitter.addListener('onSmsOtpVerifySuccess', callback);
476
+ this.listeners.push(listener);
477
+ return listener;
478
+ }
479
+ catch (error) {
480
+ console.error('Failed to add onSmsOtpVerifySuccess listener:', error);
481
+ return null;
482
+ }
483
+ }
484
+ onSmsOtpResendSuccess(callback) {
485
+ try {
486
+ const emitter = this.ensureEventEmitter();
487
+ if (!emitter) {
488
+ console.error('❌ Event emitter not available for onSmsOtpResendSuccess');
489
+ return null;
490
+ }
491
+ const listener = emitter.addListener('onSmsOtpResendSuccess', callback);
492
+ this.listeners.push(listener);
493
+ return listener;
494
+ }
495
+ catch (error) {
496
+ console.error('Failed to add onSmsOtpResendSuccess listener:', error);
497
+ return null;
498
+ }
499
+ }
500
+ onSmsOtpError(callback) {
501
+ try {
502
+ const emitter = this.ensureEventEmitter();
503
+ if (!emitter) {
504
+ console.error('❌ Event emitter not available for onSmsOtpError');
505
+ return null;
506
+ }
507
+ const listener = emitter.addListener('onSmsOtpError', callback);
508
+ this.listeners.push(listener);
509
+ return listener;
510
+ }
511
+ catch (error) {
512
+ console.error('Failed to add onSmsOtpError listener:', error);
513
+ return null;
514
+ }
515
+ }
516
+ // ==================== eSign Methods ====================
517
+ async initializeESign() {
518
+ const nativeModule = this.ensureNativeModule();
519
+ try {
520
+ const result = await nativeModule.initializeESign();
521
+ return result;
522
+ }
523
+ catch (error) {
524
+ console.error('eSign Initialize Error:', error);
525
+ throw error;
526
+ }
527
+ }
528
+ async openSessionId(accessToken, username, rememberMe, userEsignModel, privateKeyFilePath) {
529
+ const nativeModule = this.ensureNativeModule();
530
+ try {
531
+ const userEsignModelJson = userEsignModel ? JSON.stringify(userEsignModel) : null;
532
+ const result = await nativeModule.openSessionId(accessToken || null, username || null, rememberMe !== undefined ? rememberMe : false, userEsignModelJson, privateKeyFilePath || null);
533
+ return result;
534
+ }
535
+ catch (error) {
536
+ console.error('eSign Open Session Error:', error);
537
+ throw error;
538
+ }
539
+ }
540
+ async registerDevice(recoverCode, pinCode, fcmToken) {
541
+ const nativeModule = this.ensureNativeModule();
542
+ try {
543
+ const result = await nativeModule.registerDevice(recoverCode, pinCode, fcmToken || null);
544
+ return result;
545
+ }
546
+ catch (error) {
547
+ console.error('eSign Register Device Error:', error);
548
+ throw error;
549
+ }
550
+ }
551
+ async listCerts(pageNumber = 1, pageSize = 10) {
552
+ const nativeModule = this.ensureNativeModule();
553
+ try {
554
+ const result = await nativeModule.listCerts(pageNumber, pageSize);
555
+ return result;
556
+ }
557
+ catch (error) {
558
+ console.error('eSign List Certs Error:', error);
559
+ throw error;
560
+ }
561
+ }
562
+ async verifyCert(serial) {
563
+ const nativeModule = this.ensureNativeModule();
564
+ try {
565
+ const result = await nativeModule.verifyCert(serial);
566
+ return result;
567
+ }
568
+ catch (error) {
569
+ console.error('eSign Verify Cert Error:', error);
570
+ throw error;
571
+ }
572
+ }
573
+ async listSignRequest(pageNumber = 1, pageSize = 10) {
574
+ const nativeModule = this.ensureNativeModule();
575
+ try {
576
+ const result = await nativeModule.listSignRequest(pageNumber, pageSize);
577
+ return result;
578
+ }
579
+ catch (error) {
580
+ console.error('eSign List Sign Request Error:', error);
581
+ throw error;
582
+ }
583
+ }
584
+ async confirmSign(signRequestId, pinCode, authId, authData, confirm = true) {
585
+ const nativeModule = this.ensureNativeModule();
586
+ try {
587
+ const result = await nativeModule.confirmSign(signRequestId, pinCode, authId || null, authData || null, confirm !== undefined ? confirm : true);
588
+ return result;
589
+ }
590
+ catch (error) {
591
+ console.error('eSign Confirm Sign Error:', error);
592
+ throw error;
593
+ }
594
+ }
595
+ async authenticate(username, password) {
596
+ const nativeModule = this.ensureNativeModule();
597
+ try {
598
+ const result = await nativeModule.authenticate(username, password);
599
+ return result;
600
+ }
601
+ catch (error) {
602
+ console.error('eSign Authenticate Error:', error);
603
+ throw error;
604
+ }
605
+ }
606
+ async registerRemoteSigning(accessToken, requestJson) {
607
+ const nativeModule = this.ensureNativeModule();
608
+ try {
609
+ const result = await nativeModule.registerRemoteSigning(accessToken, requestJson);
610
+ return result;
611
+ }
612
+ catch (error) {
613
+ console.error('eSign Register Remote Signing Error:', error);
614
+ throw error;
615
+ }
616
+ }
617
+ async signPdf(accessToken, requestJson) {
618
+ const nativeModule = this.ensureNativeModule();
619
+ try {
620
+ const result = await nativeModule.signPdf(accessToken, requestJson);
621
+ return result;
622
+ }
623
+ catch (error) {
624
+ console.error('eSign Sign PDF Error:', error);
625
+ throw error;
626
+ }
627
+ }
628
+ async sendConfirmationDocument(accessToken, requestJson) {
629
+ const nativeModule = this.ensureNativeModule();
630
+ try {
631
+ const result = await nativeModule.sendConfirmationDocument(accessToken, requestJson);
632
+ return result;
633
+ }
634
+ catch (error) {
635
+ console.error('eSign Send Confirmation Document Error:', error);
636
+ throw error;
637
+ }
638
+ }
639
+ // eSign Event Listeners
640
+ onESignInitSuccess(callback) {
641
+ try {
642
+ const emitter = this.ensureEventEmitter();
643
+ if (!emitter) {
644
+ console.error('❌ Event emitter not available for onESignInitSuccess');
645
+ return null;
646
+ }
647
+ const listener = emitter.addListener('onESignInitSuccess', callback);
648
+ this.listeners.push(listener);
649
+ return listener;
650
+ }
651
+ catch (error) {
652
+ console.error('Failed to add onESignInitSuccess listener:', error);
653
+ return null;
654
+ }
655
+ }
656
+ onESignOpenSessionSuccess(callback) {
657
+ try {
658
+ const emitter = this.ensureEventEmitter();
659
+ if (!emitter) {
660
+ console.error('❌ Event emitter not available for onESignOpenSessionSuccess');
661
+ return null;
662
+ }
663
+ const listener = emitter.addListener('onESignOpenSessionSuccess', callback);
664
+ this.listeners.push(listener);
665
+ return listener;
666
+ }
667
+ catch (error) {
668
+ console.error('Failed to add onESignOpenSessionSuccess listener:', error);
669
+ return null;
670
+ }
671
+ }
672
+ onESignRegisterDeviceSuccess(callback) {
673
+ try {
674
+ const emitter = this.ensureEventEmitter();
675
+ if (!emitter) {
676
+ console.error('❌ Event emitter not available for onESignRegisterDeviceSuccess');
677
+ return null;
678
+ }
679
+ const listener = emitter.addListener('onESignRegisterDeviceSuccess', callback);
680
+ this.listeners.push(listener);
681
+ return listener;
682
+ }
683
+ catch (error) {
684
+ console.error('Failed to add onESignRegisterDeviceSuccess listener:', error);
685
+ return null;
686
+ }
687
+ }
688
+ onESignListCertsSuccess(callback) {
689
+ try {
690
+ const emitter = this.ensureEventEmitter();
691
+ if (!emitter) {
692
+ console.error('❌ Event emitter not available for onESignListCertsSuccess');
693
+ return null;
694
+ }
695
+ const listener = emitter.addListener('onESignListCertsSuccess', callback);
696
+ this.listeners.push(listener);
697
+ return listener;
698
+ }
699
+ catch (error) {
700
+ console.error('Failed to add onESignListCertsSuccess listener:', error);
701
+ return null;
702
+ }
703
+ }
704
+ onESignVerifyCertSuccess(callback) {
705
+ try {
706
+ const emitter = this.ensureEventEmitter();
707
+ if (!emitter) {
708
+ console.error('❌ Event emitter not available for onESignVerifyCertSuccess');
709
+ return null;
710
+ }
711
+ const listener = emitter.addListener('onESignVerifyCertSuccess', callback);
712
+ this.listeners.push(listener);
713
+ return listener;
714
+ }
715
+ catch (error) {
716
+ console.error('Failed to add onESignVerifyCertSuccess listener:', error);
717
+ return null;
718
+ }
719
+ }
720
+ onESignListSignRequestSuccess(callback) {
721
+ try {
722
+ const emitter = this.ensureEventEmitter();
723
+ if (!emitter) {
724
+ console.error('❌ Event emitter not available for onESignListSignRequestSuccess');
725
+ return null;
726
+ }
727
+ const listener = emitter.addListener('onESignListSignRequestSuccess', callback);
728
+ this.listeners.push(listener);
729
+ return listener;
730
+ }
731
+ catch (error) {
732
+ console.error('Failed to add onESignListSignRequestSuccess listener:', error);
733
+ return null;
734
+ }
735
+ }
736
+ onESignConfirmSignSuccess(callback) {
737
+ try {
738
+ const emitter = this.ensureEventEmitter();
739
+ if (!emitter) {
740
+ console.error('❌ Event emitter not available for onESignConfirmSignSuccess');
741
+ return null;
742
+ }
743
+ const listener = emitter.addListener('onESignConfirmSignSuccess', callback);
744
+ this.listeners.push(listener);
745
+ return listener;
746
+ }
747
+ catch (error) {
748
+ console.error('Failed to add onESignConfirmSignSuccess listener:', error);
749
+ return null;
750
+ }
751
+ }
752
+ onESignAuthenticateSuccess(callback) {
753
+ try {
754
+ const emitter = this.ensureEventEmitter();
755
+ if (!emitter) {
756
+ console.error('❌ Event emitter not available for onESignAuthenticateSuccess');
757
+ return null;
758
+ }
759
+ const listener = emitter.addListener('onESignAuthenticateSuccess', callback);
760
+ this.listeners.push(listener);
761
+ return listener;
762
+ }
763
+ catch (error) {
764
+ console.error('Failed to add onESignAuthenticateSuccess listener:', error);
765
+ return null;
766
+ }
767
+ }
768
+ onESignRegisterRemoteSigningSuccess(callback) {
769
+ try {
770
+ const emitter = this.ensureEventEmitter();
771
+ if (!emitter) {
772
+ console.error('❌ Event emitter not available for onESignRegisterRemoteSigningSuccess');
773
+ return null;
774
+ }
775
+ const listener = emitter.addListener('onESignRegisterRemoteSigningSuccess', callback);
776
+ this.listeners.push(listener);
777
+ return listener;
778
+ }
779
+ catch (error) {
780
+ console.error('Failed to add onESignRegisterRemoteSigningSuccess listener:', error);
781
+ return null;
782
+ }
783
+ }
784
+ onESignSignPdfSuccess(callback) {
785
+ try {
786
+ const emitter = this.ensureEventEmitter();
787
+ if (!emitter) {
788
+ console.error('❌ Event emitter not available for onESignSignPdfSuccess');
789
+ return null;
790
+ }
791
+ const listener = emitter.addListener('onESignSignPdfSuccess', callback);
792
+ this.listeners.push(listener);
793
+ return listener;
794
+ }
795
+ catch (error) {
796
+ console.error('Failed to add onESignSignPdfSuccess listener:', error);
797
+ return null;
798
+ }
799
+ }
800
+ onESignSendConfirmationDocumentSuccess(callback) {
801
+ try {
802
+ const emitter = this.ensureEventEmitter();
803
+ if (!emitter) {
804
+ console.error('❌ Event emitter not available for onESignSendConfirmationDocumentSuccess');
805
+ return null;
806
+ }
807
+ const listener = emitter.addListener('onESignSendConfirmationDocumentSuccess', callback);
808
+ this.listeners.push(listener);
809
+ return listener;
810
+ }
811
+ catch (error) {
812
+ console.error('Failed to add onESignSendConfirmationDocumentSuccess listener:', error);
813
+ return null;
814
+ }
815
+ }
816
+ onESignError(callback) {
817
+ try {
818
+ const emitter = this.ensureEventEmitter();
819
+ if (!emitter) {
820
+ console.error('❌ Event emitter not available for onESignError');
821
+ return null;
822
+ }
823
+ const listener = emitter.addListener('onESignError', callback);
824
+ this.listeners.push(listener);
825
+ return listener;
826
+ }
827
+ catch (error) {
828
+ console.error('Failed to add onESignError listener:', error);
829
+ return null;
830
+ }
831
+ }
254
832
  // SdkEkycUI method
255
833
  async startEkycUI(appKey, flowSDK, language, transactionId, appKeyConfig, optionConfig, styleConfig) {
256
834
  if (!this.isInitialized) {
@@ -265,7 +843,8 @@ class SDKeKYC {
265
843
  const optionConfigJson = optionConfig ? JSON.stringify(optionConfig) : '{}';
266
844
  const appKeyConfigJson = JSON.stringify(appKeyConfig);
267
845
  const styleConfigJson = styleConfig ? JSON.stringify(styleConfig) : '{}';
268
- const result = await EKYCNativeModule.startEkycUI(appKey, flowSDKJson, language, transactionId, optionConfigJson, appKeyConfigJson, styleConfigJson);
846
+ const nativeModule = this.ensureNativeModule();
847
+ const result = await nativeModule.startEkycUI(appKey, flowSDKJson, language, transactionId, optionConfigJson, appKeyConfigJson, styleConfigJson);
269
848
  console.log('✅ SdkEkycUI started successfully');
270
849
  return result;
271
850
  }