import { CheckSummaryResponse } from "./ekycOCRType"; /** * Custom actions cho liveness – map Android SDKFaceDetectStatus. * Bên sử dụng truyền enum vào optionConfig.customActions thay vì string. */ export enum SDKFaceDetectStatus { LEFT = "LEFT", RIGHT = "RIGHT", UP = "UP", DOWN = "DOWN", SMILE = "SMILE", BLINK = "BLINK", TILT_LEFT = "TILT_LEFT", TILT_RIGHT = "TILT_RIGHT", WINK_LEFT = "WINK_LEFT", WINK_RIGHT = "WINK_RIGHT", STRAIGHT = "STRAIGHT", } /** Mảng đầy đủ các action (trừ STRAIGHT thường được SDK tự thêm cuối) – dùng cho picker / default. */ export const SDK_LIVENESS_ACTIONS: readonly SDKFaceDetectStatus[] = [ SDKFaceDetectStatus.LEFT, SDKFaceDetectStatus.RIGHT, SDKFaceDetectStatus.UP, SDKFaceDetectStatus.DOWN, SDKFaceDetectStatus.SMILE, SDKFaceDetectStatus.BLINK, SDKFaceDetectStatus.TILT_LEFT, SDKFaceDetectStatus.TILT_RIGHT, SDKFaceDetectStatus.WINK_LEFT, SDKFaceDetectStatus.WINK_RIGHT, SDKFaceDetectStatus.STRAIGHT, ] as const; /** Chuyển customActions enum[] sang string[] khi gửi xuống native. */ export function customActionsToStrings(actions: SDKFaceDetectStatus[]): string[] { return actions.map(a => a as string); } export interface LivenessConfig { appKey: string; transactionId?: string; // old fields usingRandomAction and isStraight removed in 1.3.1 // usingRandomAction: boolean; // isStraight: boolean; selfieImage: string; // New fields for version 1.3.0 isActiveLiveness?: boolean; isActiveLivenessColor?: boolean; isShowCameraFont?: boolean; customActions?: SDKFaceDetectStatus[]; activeActionCount?: number; forceCaptureTimeout?: number; } export interface CheckLivenessResponse { metadata?: Metadata; result?: LivenessCheckResult; status?: string; statusCode?: string; } export interface Metadata { requestId?: string; transactionId?: string; } export interface LivenessCheckResult { details?: Details; summary?: CheckSummaryResponse; } export interface Details { ageRange?: AgeRange; liveFace?: LiveFace; qualityChecks?: QualityChecks; } export interface AgeRange { confidence?: string; high?: number; low?: number; score?: number; value?: string; } export interface LiveFace { confidence?: string; score?: number; value?: string; } export interface QualityChecks { blur?: QualityCheck; bright?: QualityCheck; dull?: QualityCheck; eyesClosed?: QualityCheck; eyewear?: QualityCheck; faceOccluded?: QualityCheck; hat?: QualityCheck; headTurned?: QualityCheck; maskPresent?: QualityCheck; multipleFaces?: QualityCheck; nudity?: QualityCheck; readingGlasses?: QualityCheck; sunglasses?: QualityCheck; } // Common interface for all quality check fields export interface QualityCheck { confidence?: string; score?: number; value?: string; } /** Liveness error – dùng chung EKYCError (event, code, message). */ export type LivenessError = import('./ekycType').EKYCError; /** * Payload emitted by onLivenessSuccess listener. * event = "LIVENESS_SUCCESS" | "LOG_SUCCESS" * data = CheckLivenessResponse object (bridge serialises fields directly, not a JSON string) */ export interface LivenessSuccessEvent { event: string; data: CheckLivenessResponse; }