@finos_sdk/sdk-ekyc 1.4.4 → 1.4.5

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.
@@ -65,7 +65,7 @@ dependencies {
65
65
  implementation 'com.facebook.react:react-android'
66
66
 
67
67
  // Finos eKYC SDK dependencies from GitHub Packages Maven repository
68
- def sdkVersion = "1.4.4"
68
+ def sdkVersion = "1.4.5.2"
69
69
  implementation("finos.sdk.ekyc:ekyc:$sdkVersion")
70
70
  implementation("finos.sdk.ekyc:ekycui:$sdkVersion")
71
71
  implementation("finos.sdk.ekyc:nfc:$sdkVersion")
@@ -2,6 +2,7 @@ package finos.sdk.ekyc
2
2
 
3
3
  import android.R
4
4
  import android.net.Uri
5
+ import com.google.gson.Gson
5
6
  import android.os.Handler
6
7
  import android.os.Looper
7
8
  import android.util.Base64
@@ -108,6 +109,7 @@ class EKYCModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
108
109
  Arguments.createMap().apply {
109
110
  putInt("status", result.status)
110
111
  putString("msg", result.msg)
112
+ result.errorCode?.let { putString("errorCode", it) }
111
113
  result.data?.let { d ->
112
114
  putMap("data", Arguments.createMap().apply {
113
115
  d.sessionId?.let { putString("sessionId", it) }
@@ -130,6 +132,7 @@ class EKYCModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
130
132
  Arguments.createMap().apply {
131
133
  putInt("status", result.status)
132
134
  putString("msg", result.msg)
135
+ result.errorCode?.let { putString("errorCode", it) }
133
136
  result.data?.let { d ->
134
137
  putMap("data", Arguments.createMap().apply {
135
138
  putString("transactionId", d.transactionId)
@@ -483,6 +486,17 @@ class EKYCModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
483
486
  eKYCFinOSLiveness.startEkyc(
484
487
  ekycConfigSDK = ekycConfig,
485
488
  callbackSuccess = { event, data ->
489
+ // LOG_SUCCESS = internal submit result event (v1.4.5), don't resolve promise
490
+ if (event == EKYCEvent.LOG_SUCCESS) {
491
+ val logDataStr = data?.customData?.let { Gson().toJson(it) } ?: data?.toString() ?: "null"
492
+ Log.d(TAG, "LOG_SUCCESS [Liveness]: $logDataStr")
493
+ val logMap = Arguments.createMap().apply {
494
+ putString("event", event.name.toString())
495
+ putString("data", logDataStr)
496
+ }
497
+ sendEvent("onLivenessSuccess", logMap)
498
+ return@startEkyc
499
+ }
486
500
  Log.d(TAG, "✅ startLiveness() success")
487
501
  val (eventMap, promiseMap) = createSeparateMaps { map ->
488
502
  map.putString("event", event.name.toString())
@@ -556,6 +570,17 @@ class EKYCModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
556
570
  eKYCFinOSFaceService.startEkyc(
557
571
  ekycConfigSDK = ekycConfig,
558
572
  callbackSuccess = { event, data ->
573
+ // LOG_SUCCESS = internal submit result event (v1.4.5), don't resolve promise
574
+ if (event == EKYCEvent.LOG_SUCCESS) {
575
+ val logDataStr = data?.customData?.let { Gson().toJson(it) } ?: data?.toString() ?: "null"
576
+ Log.d(TAG, "LOG_SUCCESS [FaceCompare]: $logDataStr")
577
+ val logMap = Arguments.createMap().apply {
578
+ putString("event", event.name.toString())
579
+ putString("data", logDataStr)
580
+ }
581
+ sendEvent("onFaceCompareSuccess", logMap)
582
+ return@startEkyc
583
+ }
559
584
  Log.d(TAG, "✅ startFaceCompare() success")
560
585
  val (eventMap, promiseMap) = createSeparateMaps { map ->
561
586
  map.putString("event", event.name.toString())
@@ -782,6 +807,17 @@ class EKYCModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMo
782
807
  activity = currentActivity,
783
808
  ekycConfigSDK = ekycConfigSDK,
784
809
  callbackSuccess = { event, data ->
810
+ // LOG_SUCCESS = internal submit result event (v1.4.5), emit event only, don't resolve promise
811
+ if (event == EKYCEvent.LOG_SUCCESS) {
812
+ val logDataStr = data?.customData?.let { Gson().toJson(it) } ?: data?.toString() ?: "null"
813
+ Log.d(TAG, "LOG_SUCCESS [EkycUI]: $logDataStr")
814
+ sendEvent("onEkycUISuccess", Arguments.createMap().apply {
815
+ putString("status", "log")
816
+ putString("event", event.name.toString())
817
+ putString("data", logDataStr)
818
+ })
819
+ return@startEkyc
820
+ }
785
821
  Log.d(TAG, "✅ startEkycUI() callback - event=${event.name}")
786
822
  val result = data as? SDKEkycResult
787
823
  val hasRealData = result?.ekycStateModel != null
@@ -44,6 +44,8 @@ declare class SDKeKYC {
44
44
  onLivenessError(callback: (error: any) => void): EmitterSubscription | null;
45
45
  onFaceCompareSuccess(callback: (data: SDKEkycResultWithEvent) => void): EmitterSubscription | null;
46
46
  onFaceCompareError(callback: (error: any) => void): EmitterSubscription | null;
47
+ onEkycUISuccess(callback: (data: any) => void): EmitterSubscription | null;
48
+ onEkycUIError(callback: (error: any) => void): EmitterSubscription | null;
47
49
  removeAllListeners(): void;
48
50
  sendOtp(config: SmsOtpConfig): Promise<SmsOtpResult>;
49
51
  verifyOtp(config: SmsOtpConfig, otpCode: string): Promise<SmsOtpResult>;
@@ -420,6 +420,38 @@ class SDKeKYC {
420
420
  return null;
421
421
  }
422
422
  }
423
+ onEkycUISuccess(callback) {
424
+ try {
425
+ const emitter = this.ensureEventEmitter();
426
+ if (!emitter) {
427
+ console.error('❌ Event emitter not available for onEkycUISuccess');
428
+ return null;
429
+ }
430
+ const listener = emitter.addListener('onEkycUISuccess', callback);
431
+ this.listeners.push(listener);
432
+ return listener;
433
+ }
434
+ catch (error) {
435
+ console.error('Failed to add onEkycUISuccess listener:', error);
436
+ return null;
437
+ }
438
+ }
439
+ onEkycUIError(callback) {
440
+ try {
441
+ const emitter = this.ensureEventEmitter();
442
+ if (!emitter) {
443
+ console.error('❌ Event emitter not available for onEkycUIError');
444
+ return null;
445
+ }
446
+ const listener = emitter.addListener('onEkycUIError', callback);
447
+ this.listeners.push(listener);
448
+ return listener;
449
+ }
450
+ catch (error) {
451
+ console.error('Failed to add onEkycUIError listener:', error);
452
+ return null;
453
+ }
454
+ }
423
455
  removeAllListeners() {
424
456
  this.listeners.forEach(listener => listener.remove());
425
457
  this.listeners = [];
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export type { OcrConfig } from './src/types/ekycOCRType';
12
12
  export type { LivenessConfig } from './src/types/ekycLivenessType';
13
13
  export { SDKFaceDetectStatus, SDK_LIVENESS_ACTIONS, customActionsToStrings } from './src/types/ekycLivenessType';
14
14
  export type { FaceServiceConfig } from './src/types/ekycFaceType';
15
+ export { EKYCEvent, EKYCErrorEvent } from './src/types/EKYCEvent';
15
16
  export type { SDKEkycResultWithEvent, SDKEkycResultStringWithEvent, StartEkycUIResult, EKYCError } from './src/types/ekycType';
16
17
  export { getEkycError, AppIDType } from './src/types/ekycType';
17
18
  export type { NfcError } from './src/types/ekycNFCType';
package/dist/index.js CHANGED
@@ -33,9 +33,9 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.OCR_FAKE_PORTRAIT_DETECTED_CMND = exports.OCR_FAKE_CHARACTERS_DETECTED_CMND = exports.OCR_USE_NEW_ID_DOCUMENT_2 = exports.OCR_USE_NEW_ID_DOCUMENT_1 = exports.OCR_FAKE_MRZ = exports.OCR_INVALID_GENDER_CODE = exports.OCR_INVALID_ID_CARD = exports.OCR_GLARE_ID_CARD = exports.OCR_BLURRY_ID_CARD = exports.OCR_CUT_CORNER_ID_CARD = exports.OCR_CANNOT_RECOGNIZE_PORTRAIT = exports.OCR_ID_CARD_FROM_OTHER_DEVICE = exports.OCR_NOT_ORIGINAL_ID_CARD = exports.OCR_MISSING_ID_CARD_PART = exports.OCR_CANNOT_GET_ISSUE_PLACE = exports.OCR_CANNOT_GET_GENDER = exports.OCR_CANNOT_GET_HOMETOWN = exports.OCR_CANNOT_GET_RESIDENCE = exports.OCR_CANNOT_GET_ISSUE_DATE = exports.OCR_CANNOT_GET_EXPIRY_DATE = exports.OCR_CANNOT_GET_BIRTH_YEAR = exports.OCR_CANNOT_GET_NAME = exports.OCR_CANNOT_GET_ID_NUMBER = exports.OCR_WRONG_ID_CARD_SIDE = exports.OCR_UNRECOGNIZED_ID_CARD = exports.SDK_MISS_KEY = exports.ERROR_UNKNOWN = exports.SDK_START_ERROR = exports.SDK_START_FLOW_ERROR = exports.getMessage = exports.getErrorResultFromDetails = exports.createCustom = exports.fromCode = exports.getLocalizedMessage = exports.parseNfcResponse = exports.AuthorizationStatus = exports.AppIDType = exports.getEkycError = exports.customActionsToStrings = exports.SDK_LIVENESS_ACTIONS = exports.SDKFaceDetectStatus = exports.flowToStrings = exports.SDK_FLOW_OPTIONS = exports.SDKFlowType = exports.FinosESignModule = exports.FinosESign = exports.FinosEKYCModule = exports.FinosEKYC = exports.SDKeKYC = exports.sdkEKYC = void 0;
37
- exports.ESIGN_INVALID_RECOVERY_OR_PIN = exports.ESIGN_SESSION_INVALID_REGISTER = exports.ESIGN_INVALID_USER_ACCOUNT = exports.ESIGN_APP_LIMITED = exports.ESIGN_DEVICE_NOT_INIT = exports.ESIGN_INVALID_LICENSE_CONTENT = exports.ESIGN_INVALID_LICENSE = exports.ESIGN_DEVICE_ALREADY_INIT = exports.ESIGN_SESSION_INVALID = exports.FETCH_HISTORY_ERROR = exports.QRCODE_ERROR = exports.SMS_OTP_RATE_LIMIT = exports.SMS_OTP_NOT_FOUND = exports.SMS_OTP_MAX_ATTEMPTS = exports.SMS_OTP_INVALID_PHONE = exports.SMS_OTP_ERROR = exports.NFC_CHIP_AUTH_FAILED = exports.NFC_USER_CANCEL = exports.NFC_UNKNOWN_ERROR = exports.NFC_IO_ERROR = exports.NFC_INVALID_MRZ_KEY = exports.NFC_CONNECTION_LOST = exports.NFC_MUTUAL_AUTH_FAILED = exports.C06_ERROR = exports.SCAN_NFC_ENABLE = exports.SCAN_NFC_CHECK = exports.SCAN_NFC_ERROR = exports.HEAD_IS_TURNED_IN_SELFIE = exports.NUDITY_DETECTED_IN_SELFIE = exports.READING_GLASSES_DETECTED_IN_SELFIE = exports.EYEWEAR_DETECTED_IN_SELFIE = exports.FACE_OCCLUDED_IN_SELFIE = exports.FACE_IS_BLURRED = exports.MASK_PRESENT_IN_SELFIE = exports.EYES_CLOSED_IN_SELFIE = exports.MULTIPLE_FACES_IN_SELFIE = exports.LIVENESS_FAIL = exports.LIVENESS_ERROR = exports.FACE_ERROR = exports.FACE_HAT_ERROR = exports.OCR_ERROR = exports.OCR_FONT_BACK_NOT_MATCH = exports.OCR_PHOTOCOPY_ID_CARD = exports.OCR_FAKE_PORTRAIT_DETECTED = exports.OCR_FAKE_CHARACTERS_DETECTED_2 = exports.OCR_FAKE_CHARACTERS_DETECTED_1 = exports.OCR_UNKNOWN_ID_NUMBER_LENGTH = exports.OCR_MODIFIED_BIRTH_DATE_DETECTED_CMND = exports.OCR_MODIFIED_SYMBOL_DETECTED_CMND = exports.OCR_FAKE_BIRTH_DATE_DETECTED_CMND = void 0;
38
- exports.SDK_NAME = exports.SDK_VERSION = exports.USER_CANCEL = exports.ESIGN_INVALID_PIN_CODE = exports.ESIGN_INVALID_RECOVERY_CODE = exports.ESIGN_INVALID_LICENSE_CODE = exports.ESIGN_INVALID_CONTEXT = exports.ESIGN_MISSING_REQUEST_ID = exports.ESIGN_MISSING_SERIAL = exports.ESIGN_MISSING_IDENTITY = exports.ESIGN_MISSING_ACCESS_TOKEN = exports.ESIGN_NO_SESSION_ID = exports.ESIGN_MISSING_CONFIRMATION_DOC = exports.ESIGN_MISSING_REQUEST_JSON = exports.ESIGN_MISSING_CCCD = exports.ESIGN_MISSING_TOKEN = exports.ESIGN_ERROR_UNKNOWN = exports.ESIGN_AUTH_REQUEST_EXISTS = exports.ESIGN_INVALID_CERT_FOR_AUTH = exports.ESIGN_INVALID_SIGN_COUNT_OR_TIME = exports.ESIGN_AUTH_EXISTS = exports.ESIGN_SESSION_INVALID_LIST_CERT = void 0;
36
+ exports.OCR_USE_NEW_ID_DOCUMENT_2 = exports.OCR_USE_NEW_ID_DOCUMENT_1 = exports.OCR_FAKE_MRZ = exports.OCR_INVALID_GENDER_CODE = exports.OCR_INVALID_ID_CARD = exports.OCR_GLARE_ID_CARD = exports.OCR_BLURRY_ID_CARD = exports.OCR_CUT_CORNER_ID_CARD = exports.OCR_CANNOT_RECOGNIZE_PORTRAIT = exports.OCR_ID_CARD_FROM_OTHER_DEVICE = exports.OCR_NOT_ORIGINAL_ID_CARD = exports.OCR_MISSING_ID_CARD_PART = exports.OCR_CANNOT_GET_ISSUE_PLACE = exports.OCR_CANNOT_GET_GENDER = exports.OCR_CANNOT_GET_HOMETOWN = exports.OCR_CANNOT_GET_RESIDENCE = exports.OCR_CANNOT_GET_ISSUE_DATE = exports.OCR_CANNOT_GET_EXPIRY_DATE = exports.OCR_CANNOT_GET_BIRTH_YEAR = exports.OCR_CANNOT_GET_NAME = exports.OCR_CANNOT_GET_ID_NUMBER = exports.OCR_WRONG_ID_CARD_SIDE = exports.OCR_UNRECOGNIZED_ID_CARD = exports.SDK_MISS_KEY = exports.ERROR_UNKNOWN = exports.SDK_START_ERROR = exports.SDK_START_FLOW_ERROR = exports.getMessage = exports.getErrorResultFromDetails = exports.createCustom = exports.fromCode = exports.getLocalizedMessage = exports.parseNfcResponse = exports.AuthorizationStatus = exports.AppIDType = exports.getEkycError = exports.EKYCErrorEvent = exports.EKYCEvent = exports.customActionsToStrings = exports.SDK_LIVENESS_ACTIONS = exports.SDKFaceDetectStatus = exports.flowToStrings = exports.SDK_FLOW_OPTIONS = exports.SDKFlowType = exports.FinosESignModule = exports.FinosESign = exports.FinosEKYCModule = exports.FinosEKYC = exports.SDKeKYC = exports.sdkEKYC = void 0;
37
+ exports.ESIGN_INVALID_USER_ACCOUNT = exports.ESIGN_APP_LIMITED = exports.ESIGN_DEVICE_NOT_INIT = exports.ESIGN_INVALID_LICENSE_CONTENT = exports.ESIGN_INVALID_LICENSE = exports.ESIGN_DEVICE_ALREADY_INIT = exports.ESIGN_SESSION_INVALID = exports.FETCH_HISTORY_ERROR = exports.QRCODE_ERROR = exports.SMS_OTP_RATE_LIMIT = exports.SMS_OTP_NOT_FOUND = exports.SMS_OTP_MAX_ATTEMPTS = exports.SMS_OTP_INVALID_PHONE = exports.SMS_OTP_ERROR = exports.NFC_CHIP_AUTH_FAILED = exports.NFC_USER_CANCEL = exports.NFC_UNKNOWN_ERROR = exports.NFC_IO_ERROR = exports.NFC_INVALID_MRZ_KEY = exports.NFC_CONNECTION_LOST = exports.NFC_MUTUAL_AUTH_FAILED = exports.C06_ERROR = exports.SCAN_NFC_ENABLE = exports.SCAN_NFC_CHECK = exports.SCAN_NFC_ERROR = exports.HEAD_IS_TURNED_IN_SELFIE = exports.NUDITY_DETECTED_IN_SELFIE = exports.READING_GLASSES_DETECTED_IN_SELFIE = exports.EYEWEAR_DETECTED_IN_SELFIE = exports.FACE_OCCLUDED_IN_SELFIE = exports.FACE_IS_BLURRED = exports.MASK_PRESENT_IN_SELFIE = exports.EYES_CLOSED_IN_SELFIE = exports.MULTIPLE_FACES_IN_SELFIE = exports.LIVENESS_FAIL = exports.LIVENESS_ERROR = exports.FACE_ERROR = exports.FACE_HAT_ERROR = exports.OCR_ERROR = exports.OCR_FONT_BACK_NOT_MATCH = exports.OCR_PHOTOCOPY_ID_CARD = exports.OCR_FAKE_PORTRAIT_DETECTED = exports.OCR_FAKE_CHARACTERS_DETECTED_2 = exports.OCR_FAKE_CHARACTERS_DETECTED_1 = exports.OCR_UNKNOWN_ID_NUMBER_LENGTH = exports.OCR_MODIFIED_BIRTH_DATE_DETECTED_CMND = exports.OCR_MODIFIED_SYMBOL_DETECTED_CMND = exports.OCR_FAKE_BIRTH_DATE_DETECTED_CMND = exports.OCR_FAKE_PORTRAIT_DETECTED_CMND = exports.OCR_FAKE_CHARACTERS_DETECTED_CMND = void 0;
38
+ exports.SDK_NAME = exports.SDK_VERSION = exports.USER_CANCEL = exports.ESIGN_INVALID_PIN_CODE = exports.ESIGN_INVALID_RECOVERY_CODE = exports.ESIGN_INVALID_LICENSE_CODE = exports.ESIGN_INVALID_CONTEXT = exports.ESIGN_MISSING_REQUEST_ID = exports.ESIGN_MISSING_SERIAL = exports.ESIGN_MISSING_IDENTITY = exports.ESIGN_MISSING_ACCESS_TOKEN = exports.ESIGN_NO_SESSION_ID = exports.ESIGN_MISSING_CONFIRMATION_DOC = exports.ESIGN_MISSING_REQUEST_JSON = exports.ESIGN_MISSING_CCCD = exports.ESIGN_MISSING_TOKEN = exports.ESIGN_ERROR_UNKNOWN = exports.ESIGN_AUTH_REQUEST_EXISTS = exports.ESIGN_INVALID_CERT_FOR_AUTH = exports.ESIGN_INVALID_SIGN_COUNT_OR_TIME = exports.ESIGN_AUTH_EXISTS = exports.ESIGN_SESSION_INVALID_LIST_CERT = exports.ESIGN_INVALID_RECOVERY_OR_PIN = exports.ESIGN_SESSION_INVALID_REGISTER = void 0;
39
39
  const EKYCModule_1 = __importStar(require("./EKYCModule"));
40
40
  exports.sdkEKYC = EKYCModule_1.default;
41
41
  Object.defineProperty(exports, "SDKeKYC", { enumerable: true, get: function () { return EKYCModule_1.SDKeKYC; } });
@@ -59,6 +59,10 @@ var ekycLivenessType_1 = require("./src/types/ekycLivenessType");
59
59
  Object.defineProperty(exports, "SDKFaceDetectStatus", { enumerable: true, get: function () { return ekycLivenessType_1.SDKFaceDetectStatus; } });
60
60
  Object.defineProperty(exports, "SDK_LIVENESS_ACTIONS", { enumerable: true, get: function () { return ekycLivenessType_1.SDK_LIVENESS_ACTIONS; } });
61
61
  Object.defineProperty(exports, "customActionsToStrings", { enumerable: true, get: function () { return ekycLivenessType_1.customActionsToStrings; } });
62
+ // Export event enums (port of Android EKYCEvent.kt & EKYCErrorEvent.kt)
63
+ var EKYCEvent_1 = require("./src/types/EKYCEvent");
64
+ Object.defineProperty(exports, "EKYCEvent", { enumerable: true, get: function () { return EKYCEvent_1.EKYCEvent; } });
65
+ Object.defineProperty(exports, "EKYCErrorEvent", { enumerable: true, get: function () { return EKYCEvent_1.EKYCErrorEvent; } });
62
66
  var ekycType_1 = require("./src/types/ekycType");
63
67
  Object.defineProperty(exports, "getEkycError", { enumerable: true, get: function () { return ekycType_1.getEkycError; } });
64
68
  Object.defineProperty(exports, "AppIDType", { enumerable: true, get: function () { return ekycType_1.AppIDType; } });
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos_sdk/sdk-ekyc",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "React Native SDK for eKYC - Vietnamese CCCD NFC reading, OCR, Liveness detection, Face matching, and C06, eSign, SmsOTP residence verification",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -146,6 +146,14 @@ export declare class FinosEKYCModule {
146
146
  onFaceCompareSuccess(callback: (data: SDKEkycResultWithEvent) => void): import("react-native").EmitterSubscription | null;
147
147
  /** Payload là EKYCError: { event, code, message }. */
148
148
  onFaceCompareError(callback: (error: EKYCError) => void): import("react-native").EmitterSubscription | null;
149
+ /**
150
+ * Listen for eKYC UI success events (including LOG_SUCCESS from Liveness/FaceService submit)
151
+ */
152
+ onEkycUISuccess(callback: (data: any) => void): import("react-native").EmitterSubscription | null;
153
+ /**
154
+ * Listen for eKYC UI error events
155
+ */
156
+ onEkycUIError(callback: (error: any) => void): import("react-native").EmitterSubscription | null;
149
157
  /**
150
158
  * Remove all event listeners
151
159
  */
@@ -345,6 +345,18 @@ class FinosEKYCModule {
345
345
  onFaceCompareError(callback) {
346
346
  return this.sdk.onFaceCompareError(callback);
347
347
  }
348
+ /**
349
+ * Listen for eKYC UI success events (including LOG_SUCCESS from Liveness/FaceService submit)
350
+ */
351
+ onEkycUISuccess(callback) {
352
+ return this.sdk.onEkycUISuccess(callback);
353
+ }
354
+ /**
355
+ * Listen for eKYC UI error events
356
+ */
357
+ onEkycUIError(callback) {
358
+ return this.sdk.onEkycUIError(callback);
359
+ }
348
360
  /**
349
361
  * Remove all event listeners
350
362
  */
@@ -0,0 +1,60 @@
1
+ /**
2
+ * React Native port of EkycNativeAndroid EKYCEvent.kt
3
+ * Enum các sự kiện SDK trả về qua callback, đồng bộ 1:1 với Android enum.
4
+ *
5
+ * @see EkycNativeAndroid/Module/SDKCore/src/main/java/finos/sdk/core/define/EKYCEvent.kt
6
+ */
7
+ /**
8
+ * EKYCEvent – tên event trả về từ native callback success.
9
+ * Giá trị string map chính xác với Android enum name.
10
+ */
11
+ export declare enum EKYCEvent {
12
+ /** SDK khởi tạo thành công, activity/flow vừa mở. */
13
+ SDK_START_SUCCESS = "SDK_START_SUCCESS",
14
+ /** SDK flow hoàn thành, có data kết quả. */
15
+ SDK_END_SUCCESS = "SDK_END_SUCCESS",
16
+ /** Bắt đầu quét NFC (đang chờ thẻ). */
17
+ SCAN_NFC_START = "SCAN_NFC_START",
18
+ /** Quét NFC thành công, có dữ liệu thẻ. */
19
+ SCAN_NFC_SUCCESS = "SCAN_NFC_SUCCESS",
20
+ /** Xác minh C06 thành công. */
21
+ C06_SUCCESS = "C06_SUCCESS",
22
+ /** Liveness detection thành công. */
23
+ LIVENESS_SUCCESS = "LIVENESS_SUCCESS",
24
+ /** Face detection đang xử lý (progress). */
25
+ FACE_PROGRESS = "FACE_PROGRESS",
26
+ /** Face compare thành công. */
27
+ FACE_SUCCESS = "FACE_SUCCESS",
28
+ /** OCR xử lý thành công. */
29
+ OCR_SUCCESS = "OCR_SUCCESS",
30
+ /** QR Code quét thành công. */
31
+ QRCODE_SUCCESS = "QRCODE_SUCCESS",
32
+ /** Lấy lịch sử giao dịch thành công. */
33
+ FETCH_LATEST_TRANSACTION_SUCCESS = "FETCH_LATEST_TRANSACTION_SUCCESS",
34
+ /** Gửi SMS OTP thành công. */
35
+ SMS_OTP_SEND_SUCCESS = "SMS_OTP_SEND_SUCCESS",
36
+ /** Xác minh SMS OTP thành công. */
37
+ SMS_OTP_VERIFY_SUCCESS = "SMS_OTP_VERIFY_SUCCESS",
38
+ /** Gửi lại SMS OTP thành công. */
39
+ SMS_OTP_RESEND_SUCCESS = "SMS_OTP_RESEND_SUCCESS",
40
+ /** Kết quả NFC/Liveness/FaceService đã submit lên server thành công (v1.4.5). */
41
+ LOG_SUCCESS = "LOG_SUCCESS"
42
+ }
43
+ /**
44
+ * EKYCErrorEvent – tên event trả về từ native callback error.
45
+ * Đồng bộ với Android enum EKYCErrorEvent.
46
+ *
47
+ * @see EkycNativeAndroid/Module/SDKCore/src/main/java/finos/sdk/core/define/EKYCErrorEvent.kt
48
+ */
49
+ export declare enum EKYCErrorEvent {
50
+ SDK_START_ERROR = "SDK_START_ERROR",
51
+ OCR_ERROR = "OCR_ERROR",
52
+ LIVENESS_ERROR = "LIVENESS_ERROR",
53
+ FACE_ERROR = "FACE_ERROR",
54
+ NFC_ERROR = "NFC_ERROR",
55
+ C06_ERROR = "C06_ERROR",
56
+ SDK_DETAIL = "SDK_DETAIL",
57
+ SMS_OTP_ERROR = "SMS_OTP_ERROR",
58
+ ESIGN_ERROR = "ESIGN_ERROR",
59
+ USER_CANCEL = "USER_CANCEL"
60
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * React Native port of EkycNativeAndroid EKYCEvent.kt
4
+ * Enum các sự kiện SDK trả về qua callback, đồng bộ 1:1 với Android enum.
5
+ *
6
+ * @see EkycNativeAndroid/Module/SDKCore/src/main/java/finos/sdk/core/define/EKYCEvent.kt
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.EKYCErrorEvent = exports.EKYCEvent = void 0;
10
+ /**
11
+ * EKYCEvent – tên event trả về từ native callback success.
12
+ * Giá trị string map chính xác với Android enum name.
13
+ */
14
+ var EKYCEvent;
15
+ (function (EKYCEvent) {
16
+ /** SDK khởi tạo thành công, activity/flow vừa mở. */
17
+ EKYCEvent["SDK_START_SUCCESS"] = "SDK_START_SUCCESS";
18
+ /** SDK flow hoàn thành, có data kết quả. */
19
+ EKYCEvent["SDK_END_SUCCESS"] = "SDK_END_SUCCESS";
20
+ /** Bắt đầu quét NFC (đang chờ thẻ). */
21
+ EKYCEvent["SCAN_NFC_START"] = "SCAN_NFC_START";
22
+ /** Quét NFC thành công, có dữ liệu thẻ. */
23
+ EKYCEvent["SCAN_NFC_SUCCESS"] = "SCAN_NFC_SUCCESS";
24
+ /** Xác minh C06 thành công. */
25
+ EKYCEvent["C06_SUCCESS"] = "C06_SUCCESS";
26
+ /** Liveness detection thành công. */
27
+ EKYCEvent["LIVENESS_SUCCESS"] = "LIVENESS_SUCCESS";
28
+ /** Face detection đang xử lý (progress). */
29
+ EKYCEvent["FACE_PROGRESS"] = "FACE_PROGRESS";
30
+ /** Face compare thành công. */
31
+ EKYCEvent["FACE_SUCCESS"] = "FACE_SUCCESS";
32
+ /** OCR xử lý thành công. */
33
+ EKYCEvent["OCR_SUCCESS"] = "OCR_SUCCESS";
34
+ /** QR Code quét thành công. */
35
+ EKYCEvent["QRCODE_SUCCESS"] = "QRCODE_SUCCESS";
36
+ /** Lấy lịch sử giao dịch thành công. */
37
+ EKYCEvent["FETCH_LATEST_TRANSACTION_SUCCESS"] = "FETCH_LATEST_TRANSACTION_SUCCESS";
38
+ /** Gửi SMS OTP thành công. */
39
+ EKYCEvent["SMS_OTP_SEND_SUCCESS"] = "SMS_OTP_SEND_SUCCESS";
40
+ /** Xác minh SMS OTP thành công. */
41
+ EKYCEvent["SMS_OTP_VERIFY_SUCCESS"] = "SMS_OTP_VERIFY_SUCCESS";
42
+ /** Gửi lại SMS OTP thành công. */
43
+ EKYCEvent["SMS_OTP_RESEND_SUCCESS"] = "SMS_OTP_RESEND_SUCCESS";
44
+ /** Kết quả NFC/Liveness/FaceService đã submit lên server thành công (v1.4.5). */
45
+ EKYCEvent["LOG_SUCCESS"] = "LOG_SUCCESS";
46
+ })(EKYCEvent || (exports.EKYCEvent = EKYCEvent = {}));
47
+ /**
48
+ * EKYCErrorEvent – tên event trả về từ native callback error.
49
+ * Đồng bộ với Android enum EKYCErrorEvent.
50
+ *
51
+ * @see EkycNativeAndroid/Module/SDKCore/src/main/java/finos/sdk/core/define/EKYCErrorEvent.kt
52
+ */
53
+ var EKYCErrorEvent;
54
+ (function (EKYCErrorEvent) {
55
+ EKYCErrorEvent["SDK_START_ERROR"] = "SDK_START_ERROR";
56
+ EKYCErrorEvent["OCR_ERROR"] = "OCR_ERROR";
57
+ EKYCErrorEvent["LIVENESS_ERROR"] = "LIVENESS_ERROR";
58
+ EKYCErrorEvent["FACE_ERROR"] = "FACE_ERROR";
59
+ EKYCErrorEvent["NFC_ERROR"] = "NFC_ERROR";
60
+ EKYCErrorEvent["C06_ERROR"] = "C06_ERROR";
61
+ EKYCErrorEvent["SDK_DETAIL"] = "SDK_DETAIL";
62
+ EKYCErrorEvent["SMS_OTP_ERROR"] = "SMS_OTP_ERROR";
63
+ EKYCErrorEvent["ESIGN_ERROR"] = "ESIGN_ERROR";
64
+ EKYCErrorEvent["USER_CANCEL"] = "USER_CANCEL";
65
+ })(EKYCErrorEvent || (exports.EKYCErrorEvent = EKYCErrorEvent = {}));
@@ -56,6 +56,7 @@ export interface ESignSignRequestConfirm {
56
56
  export interface ESignApiResponse {
57
57
  status: number;
58
58
  msg: string;
59
+ errorCode?: string;
59
60
  data?: {
60
61
  sessionId?: string;
61
62
  [key: string]: any;
@@ -69,6 +70,7 @@ export interface ESignApiResponse {
69
70
  export interface ESignPdfResult {
70
71
  status: number;
71
72
  msg: string;
73
+ errorCode?: string;
72
74
  data?: {
73
75
  transactionId: string;
74
76
  [key: string]: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos_sdk/sdk-ekyc",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "React Native SDK for eKYC - Vietnamese CCCD NFC reading, OCR, Liveness detection, Face matching, and C06, eSign, SmsOTP residence verification",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -361,6 +361,20 @@ export class FinosEKYCModule {
361
361
  return this.sdk.onFaceCompareError(callback);
362
362
  }
363
363
 
364
+ /**
365
+ * Listen for eKYC UI success events (including LOG_SUCCESS from Liveness/FaceService submit)
366
+ */
367
+ public onEkycUISuccess(callback: (data: any) => void) {
368
+ return this.sdk.onEkycUISuccess(callback);
369
+ }
370
+
371
+ /**
372
+ * Listen for eKYC UI error events
373
+ */
374
+ public onEkycUIError(callback: (error: any) => void) {
375
+ return this.sdk.onEkycUIError(callback);
376
+ }
377
+
364
378
  /**
365
379
  * Remove all event listeners
366
380
  */
@@ -0,0 +1,76 @@
1
+ /**
2
+ * React Native port of EkycNativeAndroid EKYCEvent.kt
3
+ * Enum các sự kiện SDK trả về qua callback, đồng bộ 1:1 với Android enum.
4
+ *
5
+ * @see EkycNativeAndroid/Module/SDKCore/src/main/java/finos/sdk/core/define/EKYCEvent.kt
6
+ */
7
+
8
+ /**
9
+ * EKYCEvent – tên event trả về từ native callback success.
10
+ * Giá trị string map chính xác với Android enum name.
11
+ */
12
+ export enum EKYCEvent {
13
+ /** SDK khởi tạo thành công, activity/flow vừa mở. */
14
+ SDK_START_SUCCESS = 'SDK_START_SUCCESS',
15
+
16
+ /** SDK flow hoàn thành, có data kết quả. */
17
+ SDK_END_SUCCESS = 'SDK_END_SUCCESS',
18
+
19
+ /** Bắt đầu quét NFC (đang chờ thẻ). */
20
+ SCAN_NFC_START = 'SCAN_NFC_START',
21
+
22
+ /** Quét NFC thành công, có dữ liệu thẻ. */
23
+ SCAN_NFC_SUCCESS = 'SCAN_NFC_SUCCESS',
24
+
25
+ /** Xác minh C06 thành công. */
26
+ C06_SUCCESS = 'C06_SUCCESS',
27
+
28
+ /** Liveness detection thành công. */
29
+ LIVENESS_SUCCESS = 'LIVENESS_SUCCESS',
30
+
31
+ /** Face detection đang xử lý (progress). */
32
+ FACE_PROGRESS = 'FACE_PROGRESS',
33
+
34
+ /** Face compare thành công. */
35
+ FACE_SUCCESS = 'FACE_SUCCESS',
36
+
37
+ /** OCR xử lý thành công. */
38
+ OCR_SUCCESS = 'OCR_SUCCESS',
39
+
40
+ /** QR Code quét thành công. */
41
+ QRCODE_SUCCESS = 'QRCODE_SUCCESS',
42
+
43
+ /** Lấy lịch sử giao dịch thành công. */
44
+ FETCH_LATEST_TRANSACTION_SUCCESS = 'FETCH_LATEST_TRANSACTION_SUCCESS',
45
+
46
+ /** Gửi SMS OTP thành công. */
47
+ SMS_OTP_SEND_SUCCESS = 'SMS_OTP_SEND_SUCCESS',
48
+
49
+ /** Xác minh SMS OTP thành công. */
50
+ SMS_OTP_VERIFY_SUCCESS = 'SMS_OTP_VERIFY_SUCCESS',
51
+
52
+ /** Gửi lại SMS OTP thành công. */
53
+ SMS_OTP_RESEND_SUCCESS = 'SMS_OTP_RESEND_SUCCESS',
54
+
55
+ /** Kết quả NFC/Liveness/FaceService đã submit lên server thành công (v1.4.5). */
56
+ LOG_SUCCESS = 'LOG_SUCCESS',
57
+ }
58
+
59
+ /**
60
+ * EKYCErrorEvent – tên event trả về từ native callback error.
61
+ * Đồng bộ với Android enum EKYCErrorEvent.
62
+ *
63
+ * @see EkycNativeAndroid/Module/SDKCore/src/main/java/finos/sdk/core/define/EKYCErrorEvent.kt
64
+ */
65
+ export enum EKYCErrorEvent {
66
+ SDK_START_ERROR = 'SDK_START_ERROR',
67
+ OCR_ERROR = 'OCR_ERROR',
68
+ LIVENESS_ERROR = 'LIVENESS_ERROR',
69
+ FACE_ERROR = 'FACE_ERROR',
70
+ NFC_ERROR = 'NFC_ERROR',
71
+ C06_ERROR = 'C06_ERROR',
72
+ SDK_DETAIL = 'SDK_DETAIL',
73
+ SMS_OTP_ERROR = 'SMS_OTP_ERROR',
74
+ ESIGN_ERROR = 'ESIGN_ERROR',
75
+ USER_CANCEL = 'USER_CANCEL',
76
+ }
@@ -64,6 +64,7 @@ export interface ESignSignRequestConfirm {
64
64
  export interface ESignApiResponse {
65
65
  status: number;
66
66
  msg: string;
67
+ errorCode?: string;
67
68
  data?: {
68
69
  sessionId?: string;
69
70
  [key: string]: any;
@@ -78,6 +79,7 @@ export interface ESignApiResponse {
78
79
  export interface ESignPdfResult {
79
80
  status: number;
80
81
  msg: string;
82
+ errorCode?: string;
81
83
  data?: {
82
84
  transactionId: string;
83
85
  [key: string]: any; // Cho phép các field động khác