// src/providers/apacuana.types.ts import type { GenerateCertResponse, GetCertStatusResponse, GetCertTypesResponse, GetRequirementsResponse, } from 'apacuana-sdk-core/dist/api/certs'; import type { GetDocsResponse, GetDocsParams, SignaturePosition, OnboardingSignerData, } from 'apacuana-sdk-core/dist/api/signatures'; import type { GetCustomerResponse } from 'apacuana-sdk-core/dist/api/users'; import type ApacuanaSuccess from 'apacuana-sdk-core/dist/success'; // import type { // CertificateRequestParams, // RequestCertificateResponse, // } from 'apacuana-sdk-core/dist/types/certs'; import type { GetRevocationReasonsResponse, RequestRevocationResponse, } from 'apacuana-sdk-core/dist/types/revocations'; import type { UserData } from 'apacuana-sdk-core/dist/types/users'; import type { ReactNode } from 'react'; // --- Tipos para la Configuración del Provider --- /** * Define las propiedades de configuración necesarias para inicializar el Apacuana SDK. * Estos valores se pasan como props al `ApacuanaProvider`. */ export interface ApacuanaConfig { /** La URL base del API de Apacuana. */ apiUrl: string; /** La clave de API para autenticar las solicitudes. */ apiKey: string; /** El secreto utilizado para ciertas operaciones criptográficas o de autenticación. */ secretKey: string; /** El identificador único del cliente o usuario en la plataforma. */ customerId: string; /** El ID de verificación asociado al cliente. */ verificationId: string; /** El tipo de integración, puede ser 'ONBOARDING' o 'ONPREMISE'. */ integrationType: string; /** * Clave opcional utilizada para encriptar datos sensibles en el almacenamiento local seguro. * Si no se provee, se usará una por defecto, lo cual no es recomendado para producción. */ encryptionKey?: string; } /** * Props para el componente `ApacuanaProvider`. * Incluye la configuración del SDK y los componentes hijos que envolverá. */ export interface ApacuanaSDKProviderProps extends ApacuanaConfig { /** Los componentes hijos de React que tendrán acceso al contexto del SDK. */ children: ReactNode; } // --- Tipos para el Estado y Contexto del SDK --- /** * Representa los posibles estados del ciclo de vida del SDK. * - `idle`: Estado inicial antes de cualquier operación. * - `initializing`: El SDK está en proceso de configuración. * - `ready`: El SDK se ha inicializado correctamente y está listo para usarse. * - `error`: Ocurrió un error durante la inicialización. */ export type SDKStatus = 'idle' | 'initializing' | 'ready' | 'error'; /** * Define la estructura del estado interno del SDK que se expone a través del contexto. */ export interface ApacuanaSDKState { /** El estado actual del ciclo de vida del SDK. */ status: SDKStatus; /** Almacena el objeto de error si la inicialización falla. */ error: Error | null; } export interface UploadSignatureVariantData { file: File; signerId: string; } /** * Define el payload necesario para la función `signDocument`. */ export interface SignaturePayload { /** Identificador único de la firma. */ id: string; /** Array de objetos que definen la ubicación y estado de las firmas en el documento. */ positions: SignaturePosition[]; } /** * Define la estructura de los datos de una clave de certificado almacenada localmente. */ export interface CertKeyInfo { keyCert: string; name: string; email: string; rifPrefix: string; rif: string; docPrefix: string; doc: string; idUser: string; typeCert: 'cert'; certificationId: string; } export interface SignDocumentParams { signature: { id: string; positions: SignaturePosition[]; document?: File | undefined; }; pin: string; enableBiometric: boolean; } // --- Tipos para el Valor del Contexto --- /** * Define el valor completo expuesto por el `ApacuanaContext`. * Este es el objeto que se obtiene al usar el hook `useApacuana`. */ export interface ApacuanaSDKContextValue { /** El estado actual del ciclo de vida y errores del SDK. */ state: ApacuanaSDKState; /** * Obtiene la configuración actual del SDK Core. * @returns {object} La configuración del SDK. * // TODO: Reemplazar `any` con la interfaz `SDKConfig` del SDK Core. */ getConfig: () => object; /** * Obtiene la información del cliente. * @returns {Promise} Una promesa que resuelve con los datos del cliente. * // TODO: Reemplazar `any` con la interfaz `Customer` del SDK Core. */ getCustomer: () => Promise; /** * Obtiene el estado del certificado del cliente de forma síncrona. * @returns {GetCertStatusResponse} El objeto con el estado del certificado. * // TODO: Reemplazar `any` con la interfaz `CertStatusResponse` del SDK Core. */ getCertStatus: (data?: boolean) => Promise; /** * Obtiene una lista de documentos. * @param {GetDocsParams} data - Parámetros para la consulta de documentos. * @returns {Promise} Una promesa que resuelve con la lista de documentos. * // TODO: Definir un tipo para el payload `data` y la respuesta. */ getDocsByCustomer: (data: GetDocsParams) => Promise; /** * Obtiene una lista de razones de revocación. * @returns {Promise} Una promesa que resuelve con la lista de razones de revocación. */ getRevocationReasons: () => Promise; /** * Solicita la revocación de un certificado. * @param {number} reasonCode - El código numérico que indica la razón de la revocación. * @returns {Promise} Una promesa que resuelve con la respuesta de la solicitud. */ requestRevocation: (reasonCode: number) => Promise; /** * Genera un nuevo par de claves y solicita la emisión de un certificado. * @param {string} pin - El PIN que protegerá el certificado generado. * @returns {Promise} Una promesa que resuelve con la respuesta de la emisión. */ generateCert: ( pin: string, enableSaveWithBiometrics: boolean ) => Promise; /** * Envía la solicitud para firmar un documento digitalmente. * @param {SignDocumentData} signature - El objeto que contiene los datos de la firma a realizar. * @returns {Promise} Una promesa que resuelve con la respuesta del proceso de firma. */ signDocument: (params: SignDocumentParams) => Promise; startLivenessCheck: () => Promise; uploadSignatureVariant: (data: UploadSignatureVariantData) => Promise; getSignatureVariant: () => Promise; deleteSignatureVariant: () => Promise; getCertTypes: () => Promise; getRequerimentsByTypeUser: (data: { type: number; }) => Promise; addSigner: (signerData: OnboardingSignerData | object) => Promise; // requestCertificate: ( // params: CertificateRequestParams // ) => Promise; validateFaceLiveness: (params: { sessionId: string; }) => Promise; isCertificateInDevice: () => Promise; createApacuanaUser: (userData: UserData) => Promise; }