import { FlowCreatePaymentByEmailRequest, FlowCreatePaymentByEmailResponse, FlowCreatePaymentRequest, FlowCreatePaymentResponse, FlowPaymentsReceivedByDateRequest, FlowPaymentsReceivedByDateResponse, FlowPaymentsStatusExtendedResponse, FlowPaymentStatusResponse, FlowTransactionsReceivedByDateRequest, FlowTransactionsReceivedByDateResponse } from '../types/flow.payments';
/**
 * Cliente para interactuar con la API de pagos de Flow.
 * Permite crear órdenes de pago y consultar su estado.
 * Implementa un sistema de errores personalizados para un mejor manejo de fallos.
 */
export default class FlowPayments {
    private apiKey;
    private secretKey;
    private axiosInstance;
    /**
     * Objeto que proporciona métodos para interactuar con los pagos en Flow.
     */
    /**
     * Métodos para consultar el estado de pagos en Flow mediante diferentes identificadores.
     */
    status: {
        /**
         * Obtiene el estado de un pago en Flow.
         * @param {string} token Token del pago a consultar.
         * @returns {Promise<FlowPaymentStatusResponse>} Respuesta de Flow con el estado del pago.
         * @throws {FlowPaymentStatusError} Si ocurre un error al obtener el estado del pago.
         * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
         */
        byToken: (token: string) => Promise<FlowPaymentStatusResponse>;
        /**
         * Obtiene el estado de un pago utilizando el identificador de comercio.
         * @param {string} commerceId Identificador único del comercio asignado al pago.
         * @returns {Promise<FlowPaymentStatusResponse>} Una promesa que resuelve con la respuesta de Flow sobre el estado del pago.
         * @throws {FlowPaymentStatusError} Si ocurre un error al obtener el estado del pago.
         * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
         */
        byCommerceId: (commerceId: string) => Promise<FlowPaymentStatusResponse>;
        /**
         * Obtiene el estado de un pago utilizando el número de orden de Flow.
         * @param {number} flowOrder Número de orden de Flow asignado al pago.
         * @returns {Promise<FlowPaymentStatusResponse>} Una promesa que resuelve con la respuesta de Flow sobre el estado del pago.
         * @throws {FlowPaymentStatusError} Si ocurre un error al obtener el estado del pago.
         * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
         */
        byFlowOrderNumber: (flowOrder: number) => Promise<FlowPaymentStatusResponse>;
    };
    /**
     * Obtiene la lista de pagos recibidos en una fecha específica.
     * @param {FlowPaymentsReceivedByDateRequest} data con la fecha en formato YYYY-MM-DD
     * @returns {Promise<FlowPaymentsReceivedByDateResponse>} con la lista de pagos recibidos en la fecha indicada.
     * @throws {PaymentsReceivedByDateError} Si ocurre un error al obtener la lista de pagos recibidos.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    listPaymentsByDate: (data: FlowPaymentsReceivedByDateRequest) => Promise<FlowPaymentsReceivedByDateResponse>;
    /**
     * Obtiene la lista de transacciones recibidas en una fecha específica.
     * @param {FlowTransactionsReceivedByDateRequest} data con la fecha en formato YYYY-MM-DD
     * @returns {Promise<FlowTransactionsReceivedByDateResponse>} con la lista de transacciones recibidas en la fecha indicada.
     * @throws {TransactionsReceivedByDateError} Si ocurre un error al obtener la lista de transacciones recibidas.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    listTransactionsByDate: (data: FlowTransactionsReceivedByDateRequest) => Promise<FlowTransactionsReceivedByDateResponse>;
    statusExtended: {
        /**
         * Obtiene el estado extendido de un pago en base al token
         * @param {string} token Token único del pago a consultar.
         * @returns {Promise<FlowPaymentsStatusExtendedResponse>} con la lista de pagos recibidos en la fecha indicada.
         * @throws {PaymentsReceivedByDateError} Si ocurre un error al obtener la lista de pagos recibidos.
         * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
         */
        byToken: (token: string) => Promise<FlowPaymentsStatusExtendedResponse>;
        /**
         * Obtiene el estado extendido de un pago en base al flowOrder
         * @param {number} flowOrder numero de orden de Flow asignado al pago por ejemplo 68977654
         * @returns {Promise<FlowPaymentsStatusExtendedResponse>} con la lista de pagos recibidos en la fecha indicada.
         * @throws {PaymentsReceivedByDateError} Si ocurre un error al obtener la lista de pagos recibidos.
         * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
         *
         * */
        byFlowOrder: (flowOrder: number) => Promise<FlowPaymentsStatusExtendedResponse>;
    };
    /**
     * Este método permite crear una orden de pago a Flow y recibe como respuesta la URL para redirigir el browser del pagador y el token que identifica la transacción. La url de redirección se debe formar concatenando los valores recibidos en la respuesta de la siguiente forma: url + "?token=" +token Una vez que el pagador efectúe el pago, Flow notificará el resultado a la página del comercio que se envió en el parámetro urlConfirmation.
     * @param {FlowCreatePaymentRequest} data con los datos necesarios para crear un pago.
     * @returns {Promise<FlowCreatePaymentResponse>} con la respuesta de Flow al crear un pago.
     * @throws {FlowCreatePaymentError} Si ocurre un error al crear el pago.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    create: (data: FlowCreatePaymentRequest) => Promise<FlowCreatePaymentResponse>;
    /**
     * Permite generar un cobro por email. Flow emite un email al pagador que contiene la información de la Orden de pago y el link de pago correspondiente. Una vez que el pagador efectúe el pago, Flow notificará el resultado a la página del comercio que se envió en el parámetro urlConfirmation.
     * @param {FlowCreatePaymentByEmailRequest} data con los datos necesarios para crear un pago.
     * @returns {Promise<FlowCreatePaymentByEmailResponse>} con la respuesta de Flow al crear un pago.
     * @throws {FlowCreatePaymentByEmailError} Si ocurre un error al crear el pago.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    createByEmail: (data: FlowCreatePaymentByEmailRequest) => Promise<FlowCreatePaymentByEmailResponse>;
    /**
     * Constructor de la clase FlowClient.
     * @param {string} apiKey Clave de API proporcionada por Flow.
     * @param {string} secretKey Clave secreta proporcionada por Flow.
     * @param  {string}baseURL URL base de la API de Flow.
     * @throws {FlowAuthenticationError} Si no se proporciona apiKey o secretKey.
     */
    constructor(apiKey: string, secretKey: string, baseURL: string);
    /**
     * Realiza una petición a la API de Flow.
     * @param {string} endpoint URL del endpoint de la API.
     * @param {string} data Datos a enviar en la petición.
     * @param {'post' | 'get'} method Método de la petición (POST o GET).
     * @param {(e: unknown) => never} error Error a lanzar en caso de error.
     * @param {(data: P) => P} [modifyResponse] Función para modificar la respuesta de la API.
     * @returns {Promise<T>} Respuesta de la API.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     * @throws {Error} Si hay problemas al realizar la petición.
     */
    private request;
    /**
     * Obtiene el estado de un pago en Flow.
     * @param {string} token Token del pago a consultar.
     * @returns {Promise<FlowPaymentStatusResponse>} Respuesta de Flow con el estado del pago.
     * @throws {FlowPaymentStatusError} Si ocurre un error al obtener el estado del pago.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    private getPaymentStatusByToken;
    /**
     * Obtiene el estado de un pago utilizando el identificador de comercio.
     * @param {string} commerceId Identificador único del comercio asignado al pago.
     * @returns {Promise<FlowPaymentStatusResponse>} Una promesa que resuelve con la respuesta de Flow sobre el estado del pago.
     * @throws {FlowPaymentStatusError} Si ocurre un error al obtener el estado del pago.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    private getPaymentStatusByCommerceId;
    /**
     * Obtiene el estado de un pago utilizando el número de orden de Flow.
     * @param {number} flowOrder Número de orden de Flow asignado al pago.
     * @returns {Promise<FlowPaymentStatusResponse>} Una promesa que resuelve con la respuesta de Flow sobre el estado del pago.
     * @throws {FlowPaymentStatusError} Si ocurre un error al obtener el estado del pago.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    private getPaymentStatusByFlowOrderNumber;
    /**
     * Obtiene la lista de pagos recibidos en una fecha específica.
     * @param {FlowPaymentsReceivedByDateRequest} data con la fecha en formato YYYY-MM-DD
     * @returns {Promise<FlowPaymentsReceivedByDateResponse>} con la lista de pagos recibidos en la fecha indicada.
     * @throws {PaymentsReceivedByDateError} Si ocurre un error al obtener la lista de pagos recibidos.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    private getPaymentsReceivedByDate;
    /**
     * Obtiene el estado extendido de un pago en base al token
     * @param {string} token Token único del pago a consultar.
     * @returns {Promise<FlowPaymentsStatusExtendedResponse>} con la lista de pagos recibidos en la fecha indicada.
     * @throws {PaymentsReceivedByDateError} Si ocurre un error al obtener la lista de pagos recibidos.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    private getStatusExtendedByToken;
    /**
     * Obtiene el estado extendido de un pago en base al flowOrder
     * @param {number} flowOrder numero de orden de Flow asignado al pago por ejemplo 68977654
     * @returns {Promise<FlowPaymentsStatusExtendedResponse>} con la lista de pagos recibidos en la fecha indicada.
     * @throws {PaymentsReceivedByDateError} Si ocurre un error al obtener la lista de pagos recibidos.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     *
     * */
    private getStatusExtendedByFlowOrder;
    /**
     * Obtiene la lista de transacciones recibidas en una fecha específica.
     * @param {FlowTransactionsReceivedByDateRequest} data con la fecha en formato YYYY-MM-DD
     * @returns {Promise<FlowTransactionsReceivedByDateResponse>} con la lista de transacciones recibidas en la fecha indicada.
     * @throws {TransactionsReceivedByDateError} Si ocurre un error al obtener la lista de transacciones recibidas.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    private getTransactionsReceivedByDate;
    /**
     * Este método permite crear una orden de pago a Flow y recibe como respuesta la URL para redirigir el browser del pagador y el token que identifica la transacción. La url de redirección se debe formar concatenando los valores recibidos en la respuesta de la siguiente forma: url + "?token=" +token Una vez que el pagador efectúe el pago, Flow notificará el resultado a la página del comercio que se envió en el parámetro urlConfirmation.
     * @param {FlowCreatePaymentRequest} data con los datos necesarios para crear un pago.
     * @returns {Promise<FlowCreatePaymentResponse>} con la respuesta de Flow al crear un pago.
     * @throws {FlowCreatePaymentError} Si ocurre un error al crear el pago.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    private createPayment;
    /**
     * Permite generar un cobro por email. Flow emite un email al pagador que contiene la información de la Orden de pago y el link de pago correspondiente. Una vez que el pagador efectúe el pago, Flow notificará el resultado a la página del comercio que se envió en el parámetro urlConfirmation.
     * @param {FlowCreatePaymentByEmailRequest} data con los datos necesarios para crear un pago.
     * @returns {Promise<FlowCreatePaymentByEmailResponse>} con la respuesta de Flow al crear un pago.
     * @throws {FlowCreatePaymentByEmailError} Si ocurre un error al crear el pago.
     * @throws {FlowAPIError} Si la API de Flow responde con un error HTTP.
     */
    private createPaymentByEmail;
}
//# sourceMappingURL=flow.payments.d.ts.map