import { FlowAddDiscountToSubscriptionResponse, FlowAddItemToSubscriptionResponse, FlowCancelScheduledPlanChangeResponse, FlowCancelSubscriptionResponse, FlowChangeAssociatedPlanToSubscriptionRequest, FlowChangeAssociatedPlanToSubscriptionResponse, FlowCreateSubscriptionToPlanRequest, FlowCreateSubscriptionToPlanResponse, FlowGetPlanSubscriptionsRequest, FlowGetPlanSubscriptionsResponse, FlowGetSubscriptionBySubscriptionIdResponse, FlowPreviewSubscriptionPlanChangeRequest, FlowPreviewSubscriptionPlanChangeResponse, FlowRemoveDiscountFromSubscriptionResponse, FlowRemoveItemFromSubscriptionResponse, FlowUpdateSubscriptionTrialDays } from '../types/flow';
/**
 * Cliente para interactuar con la API de pagos de Flow.
 * Permite suscribir clientes a un plan de suscripción.
 */
export default class FlowSubscriptions {
    private apiKey;
    private secretKey;
    private axiosInstance;
    /**
     * Este servicio permite crear una nueva suscripción de un cliente a un Plan. Para crear una nueva suscripción, basta con enviar los parámetros planId y customerId
     * @param {FlowCreateSubscriptionToPlanRequest} data Datos para crear la suscripción.
     * @returns {Promise<FlowCreateSubscriptionToPlanResponse>} Respuesta de la API.
     * @throws {FlowCreateSubscriptionToPlanError} Si hay problemas al crear la suscripción.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    createToPlan: (data: FlowCreateSubscriptionToPlanRequest) => Promise<FlowCreateSubscriptionToPlanResponse>;
    get: {
        /**
         * Este servicio permite obtener los datos de una suscripción.
         * @param {string} subscriptionId ID de la suscripción.
         * @returns {Promise<FlowGetSubscriptionBySubscriptionIdResponse>} Respuesta de la API.
         * @throws {FlowAPIError} Si hay problemas con la API de Flow.
         * @throws {FlowGetSubscriptionBySubscriptionIdError} Si hay problemas al obtener la suscripción.
         *
         */
        bySubscriptionId: (subscriptionId: string) => Promise<FlowGetSubscriptionBySubscriptionIdResponse>;
    };
    /**
     * Permite obtener la lista de suscripciones paginada de acuerdo a los parámetros de paginación. Además, se puede definir los siguientes filtros:
     * filter: filtro por nombre del plan
     * status: filtro por estado de la suscripción.
     * @param {FlowGetPlanSubscriptionsRequest} data Datos para obtener las suscripciones.
     * @returns {Promise<FlowGetPlanSubscriptionsResponse>} Respuesta de la API.
     * @throws {FlowGetPlanSubscriptionsError} Si hay problemas al obtener las suscripciones.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    getPlanSubscriptions: (data: FlowGetPlanSubscriptionsRequest) => Promise<FlowGetPlanSubscriptionsResponse>;
    update: {
        /**
         * Este servicio permite modificar los días de Trial de una suscripción. Sólo se puede modificar los días de Trial a una suscripción que aún no se ha iniciado o que todavía está vigente el Trial.
         * @param {string} subscriptionId ID de la suscripción.
         * @param {number} trial_period_days Días de prueba.
         * @returns {Promise<FlowUpdateSubscriptionTrialDays>} Respuesta de la API.
         * @throws {FlowUpdateSubscriptionTrialDaysError} Si hay problemas al actualizar los días de prueba.
         * @throws {FlowAPIError} Si hay problemas con la API de Flow.
         */
        trialDays: (subscriptionId: string, trial_period_days: number) => Promise<FlowUpdateSubscriptionTrialDays>;
    };
    /**
     * Este servicio permite cancelar una suscripción. Existen formas de cancelar una suscripción:
     * inmediatamente. Es decir, en este instante al terminar el perído vigente.
     * Si desea cancelar la suscripción inmediatamente, envíe el parámetro at_period_end con valor 0, si desea cancelarla al final del período vigente envíe el valor 1.
     * @param {string} subscriptionId ID de la suscripción.
     * @param {number} at_period_end 0 para cancelar inmediatamente, 1 para cancelar al final del período vigente.
     * @returns {Promise<FlowCancelSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     * @throws {FlowCancelSubscriptionError} Si hay problemas al cancelar la suscripción.
     */
    cancelSubscription: (subscriptionId: string, at_period_end: number) => Promise<FlowCancelSubscriptionResponse>;
    /**
     * Este servicio permite agregar un descuento a la suscripción. Si la suscripción ya tenía un descuento, será reemplazado por este.
     * @param {string} subscriptionId ID de la suscripción.
     * @param {string} couponId ID del cupón.
     * @returns {Promise<FlowAddDiscountToSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowAddDiscountToSubscription} Si hay problemas al agregar el descuento.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    addDiscountToSubscription: (subscriptionId: string, couponId: string) => Promise<FlowAddDiscountToSubscriptionResponse>;
    /**
     * Este servicio permite eliminar el descuento que tenga la suscripción. El eliminar el descuento de la suscripción, no elimina el descuento que podría tenar asociado el cliente.
     * @param {string} subscriptionId ID de la suscripción.
     * @returns {Promise<FlowRemoveDiscountFromSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowRemoveDiscountFromSubscriptionError} Si hay problemas al eliminar el descuento.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    removeDiscountFromSubscription: (subscriptionId: string) => Promise<FlowRemoveDiscountFromSubscriptionResponse>;
    /**
     * Este servicio permite agregar un item adicional a la suscripción.
     * @param {string} subscriptionId ID de la suscripción.
     * @param {string} itemId ID del item.
     * @returns {Promise<FlowAddItemToSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowAddItemToSubscriptionError} Si hay problemas al agregar el item.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    addItemToSubscription: (subscriptionId: string, itemId: string) => Promise<FlowAddItemToSubscriptionResponse>;
    /**
     * Este servicio permite eliminar un item adicional que este agregado en una suscripción.
     * @param {string} subscriptionId ID de la suscripción.
     * @param {string} itemId ID del item.
     * @returns {Promise<FlowRemoveItemFromSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowRemoveItemFromSubscriptionError} Si hay problemas al eliminar el item.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    removeItemFromSubscription: (subscriptionId: string, itemId: string) => Promise<FlowRemoveItemFromSubscriptionResponse>;
    /**
     * Este servicio permite modificar el plan que esta asociado a una suscripción. Se puede modificar el plan de una suscripción ingresando de manera opcional una fecha asocial al cambio de plan. Esta fecha deberá estar en el rango del ciclo de facturación actual de la suscripción, y puede ser a futuro.
     * @param {FlowChangeAssociatedPlanToSubscriptionRequest} data Datos para cambiar el plan de la suscripción.
     * @returns {Promise<FlowChangeAssociatedPlanToSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowChangeAssociatedPlanToSubscriptionError} Si hay problemas al cambiar el plan de la suscripción.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    changeAssociatedPlanToSubscription: (data: FlowChangeAssociatedPlanToSubscriptionRequest) => Promise<FlowChangeAssociatedPlanToSubscriptionResponse>;
    /**
     * Este servicio permite previsualizar el modificar un plan que esta asociado a una suscripción. Se puede modificar el plan de una suscripción ingresando de manera opcional una fecha asocial al cambio de plan. Esta fecha deberá estar en el rango del ciclo de facturación actual de la suscripción, y puede ser a futuro.
     * @param {FlowChangeAssociatedPlanToSubscriptionRequest} data Datos para cambiar el plan de la suscripción.
     * @returns {Promise<FlowChangeAssociatedPlanToSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowPreviewSubscriptionPlanChangeError} Si hay problemas al cambiar el plan de la suscripción.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    previewSubscriptionPlanChange: (data: FlowPreviewSubscriptionPlanChangeRequest) => Promise<FlowPreviewSubscriptionPlanChangeResponse>;
    /**
     * Este servicio permite cancelar un cambio de plan que haya sido programado para una suscripción.
     * @param {string} subscriptionId ID de la suscripción.
     * @returns {Promise<FlowCancelScheduledPlanChangeResponse>} Respuesta de la API.
     * @throws {FlowCancelScheduledPlanChangeError} Si hay problemas al cancelar el cambio de plan.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    cancelScheduledPlanChange: (subscriptionId: string) => Promise<FlowCancelScheduledPlanChangeResponse>;
    /**
     * 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.
     * @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;
    /**
     * Este servicio permite crear una nueva suscripción de un cliente a un Plan. Para crear una nueva suscripción, basta con enviar los parámetros planId y customerId
     * @param {FlowCreateSubscriptionToPlanRequest} data Datos para crear la suscripción.
     * @returns {Promise<FlowCreateSubscriptionToPlanResponse>} Respuesta de la API.
     * @throws {FlowCreateSubscriptionToPlanError} Si hay problemas al crear la suscripción.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private createSubscriptionToPlan;
    /**
     * Este servicio permite obtener los datos de una suscripción.
     * @param {string} subscriptionId ID de la suscripción.
     * @returns {Promise<FlowGetSubscriptionBySubscriptionIdResponse>} Respuesta de la API.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     * @throws {FlowGetSubscriptionBySubscriptionIdError} Si hay problemas al obtener la suscripción.
     *
     */
    private getSubscriptionBySubscriptionId;
    /**
     * Permite obtener la lista de suscripciones paginada de acuerdo a los parámetros de paginación. Además, se puede definir los siguientes filtros:
     * filter: filtro por nombre del plan
     * status: filtro por estado de la suscripción.
     * @param {FlowGetPlanSubscriptionsRequest} data Datos para obtener las suscripciones.
     * @returns {Promise<FlowGetPlanSubscriptionsResponse>} Respuesta de la API.
     * @throws {FlowGetPlanSubscriptionsError} Si hay problemas al obtener las suscripciones.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private _getPlanSubscriptions;
    /**
     * Este servicio permite modificar los días de Trial de una suscripción. Sólo se puede modificar los días de Trial a una suscripción que aún no se ha iniciado o que todavía está vigente el Trial.
     * @param {string} subscriptionId ID de la suscripción.
     * @param {number} trial_period_days Días de prueba.
     * @returns {Promise<FlowUpdateSubscriptionTrialDays>} Respuesta de la API.
     * @throws {FlowUpdateSubscriptionTrialDaysError} Si hay problemas al actualizar los días de prueba.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private updateSubscriptionTrialDays;
    /**
     * Este servicio permite cancelar una suscripción. Existen formas de cancelar una suscripción:
     * inmediatamente. Es decir, en este instante al terminar el perído vigente.
     * Si desea cancelar la suscripción inmediatamente, envíe el parámetro at_period_end con valor 0, si desea cancelarla al final del período vigente envíe el valor 1.
     * @param {string} subscriptionId ID de la suscripción.
     * @param {number} at_period_end 0 para cancelar inmediatamente, 1 para cancelar al final del período vigente.
     * @returns {Promise<FlowCancelSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     * @throws {FlowCancelSubscriptionError} Si hay problemas al cancelar la suscripción.
     */
    private _cancelSubscription;
    /**
     * Este servicio permite agregar un descuento a la suscripción. Si la suscripción ya tenía un descuento, será reemplazado por este.
     * @param {string} subscriptionId ID de la suscripción.
     * @param {string} couponId ID del cupón.
     * @returns {Promise<FlowAddDiscountToSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowAddDiscountToSubscription} Si hay problemas al agregar el descuento.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private _addDiscountToSubscription;
    /**
     * Este servicio permite eliminar el descuento que tenga la suscripción. El eliminar el descuento de la suscripción, no elimina el descuento que podría tenar asociado el cliente.
     * @param {string} subscriptionId ID de la suscripción.
     * @returns {Promise<FlowRemoveDiscountFromSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowRemoveDiscountFromSubscriptionError} Si hay problemas al eliminar el descuento.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private _removeDiscountFromSubscription;
    /**
     * Este servicio permite agregar un item adicional a la suscripción.
     * @param {string} subscriptionId ID de la suscripción.
     * @param {string} itemId ID del item.
     * @returns {Promise<FlowAddItemToSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowAddItemToSubscriptionError} Si hay problemas al agregar el item.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private _addItemToSubscription;
    /**
     * Este servicio permite eliminar un item adicional que este agregado en una suscripción.
     * @param {string} subscriptionId ID de la suscripción.
     * @param {string} itemId ID del item.
     * @returns {Promise<FlowRemoveItemFromSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowRemoveItemFromSubscriptionError} Si hay problemas al eliminar el item.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private _removeItemFromSubscription;
    /**
     * Este servicio permite modificar el plan que esta asociado a una suscripción. Se puede modificar el plan de una suscripción ingresando de manera opcional una fecha asocial al cambio de plan. Esta fecha deberá estar en el rango del ciclo de facturación actual de la suscripción, y puede ser a futuro.
     * @param {FlowChangeAssociatedPlanToSubscriptionRequest} data Datos para cambiar el plan de la suscripción.
     * @returns {Promise<FlowChangeAssociatedPlanToSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowChangeAssociatedPlanToSubscriptionError} Si hay problemas al cambiar el plan de la suscripción.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private _changeAssociatedPlanToSubscription;
    /**
     * Este servicio permite previsualizar el modificar un plan que esta asociado a una suscripción. Se puede modificar el plan de una suscripción ingresando de manera opcional una fecha asocial al cambio de plan. Esta fecha deberá estar en el rango del ciclo de facturación actual de la suscripción, y puede ser a futuro.
     * @param {FlowChangeAssociatedPlanToSubscriptionRequest} data Datos para cambiar el plan de la suscripción.
     * @returns {Promise<FlowChangeAssociatedPlanToSubscriptionResponse>} Respuesta de la API.
     * @throws {FlowPreviewSubscriptionPlanChangeError} Si hay problemas al cambiar el plan de la suscripción.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     *
     */
    private _previewSubscriptionPlanChange;
    /**
     * Este servicio permite cancelar un cambio de plan que haya sido programado para una suscripción.
     * @param {string} subscriptionId ID de la suscripción.
     * @returns {Promise<FlowCancelScheduledPlanChangeResponse>} Respuesta de la API.
     * @throws {FlowCancelScheduledPlanChangeError} Si hay problemas al cancelar el cambio de plan.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     *
     */
    private _cancelScheduledPlanChange;
}
//# sourceMappingURL=flow.subscriptions.d.ts.map