import { FlowCreatePlanRequest, FlowCreatePlanResponse, FlowDeletePlanResponse, FlowEditPlanRequest, FlowEditPlanResponse, FlowGetPlanResponse, FlowListPlansRequest, FlowListPlansResponse } from '../types/flow';
/**
 * Cliente para interactuar con la API de pagos de Flow.
 * Permite crear planes de suscripción.
 */
export default class FlowPlans {
    private apiKey;
    private secretKey;
    private axiosInstance;
    /**
     * Este servicio permite crear un nuevo Plan de Suscripción
     * @param {FlowCreatePlanRequest} data Datos para crear el plan.
     * @returns {Promise<FlowCreatePlanResponse>} Respuesta de la API.
     * @throws {FlowCreatePlanError} Si hay problemas al crear el plan.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    create: (data: FlowCreatePlanRequest) => Promise<FlowCreatePlanResponse>;
    /**
     * Este servicio permite obtener los datos de un Plan de Suscripción
     * @param {string} planId Identificador del plan.
     * @returns {Promise<FlowGetPlanResponse>} Respuesta de la API.
     * @throws {FlowCreatePlanError} Si hay problemas al obtener el plan.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    get: (planId: string) => Promise<FlowGetPlanResponse>;
    /**
     * Este servicio permite editar los datos de un Plan de Suscripción. Si el plan tiene clientes suscritos sólo se puede modificar el campo trial_period_days.
     * @param {FlowEditPlanRequest} data Datos para editar el plan.
     * @returns {Promise<FlowEditPlanResponse>} Respuesta de la API.
     * @throws {FlowEditPlanError} Si hay problemas al editar el plan.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    edit: (data: FlowEditPlanRequest) => Promise<FlowEditPlanResponse>;
    /**
     * Este servicio permite eliminar un Plan de Suscripción. El eliminar un Plan significa que ya no podrá suscribir nuevos clientes al plan. Pero las suscripciones activas continuarán su ciclo de vida mientras estas no sean cancelas.
     * @param {string} planId Identificador del plan.
     * @returns {Promise<FlowDeletePlanResponse>} Respuesta de la API.
     * @throws {FlowEditPlanError} Si hay problemas al eliminar el plan.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    delete: (planId: string) => Promise<FlowDeletePlanResponse>;
    /**
     * Permite obtener la lista de planes de suscripción 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 del plan
     * @param {FlowListPlansRequest} data Datos para listar los planes.
     * @returns {Promise<FlowListPlansResponse>} Respuesta de la API.
     * @throws {FlowEditPlanError} Si hay problemas al listar los planes.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    list: (data: FlowListPlansRequest) => Promise<FlowListPlansResponse>;
    /**
     * 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;
    /**
     * Este servicio permite crear un nuevo Plan de Suscripción
     * @param {FlowCreatePlanRequest} data Datos para crear el plan.
     * @returns {Promise<FlowCreatePlanResponse>} Respuesta de la API.
     * @throws {FlowCreatePlanError} Si hay problemas al crear el plan.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private createPlan;
    /**
     * Este servicio permite obtener los datos de un Plan de Suscripción
     * @param {string} planId Identificador del plan.
     * @returns {Promise<FlowGetPlanResponse>} Respuesta de la API.
     * @throws {FlowCreatePlanError} Si hay problemas al obtener el plan.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private getPlan;
    /**
     * Este servicio permite editar los datos de un Plan de Suscripción. Si el plan tiene clientes suscritos sólo se puede modificar el campo trial_period_days.
     * @param {FlowEditPlanRequest} data Datos para editar el plan.
     * @returns {Promise<FlowEditPlanResponse>} Respuesta de la API.
     * @throws {FlowEditPlanError} Si hay problemas al editar el plan.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private editPlan;
    /**
     * Este servicio permite eliminar un Plan de Suscripción. El eliminar un Plan significa que ya no podrá suscribir nuevos clientes al plan. Pero las suscripciones activas continuarán su ciclo de vida mientras estas no sean cancelas.
     * @param {string} planId Identificador del plan.
     * @returns {Promise<FlowDeletePlanResponse>} Respuesta de la API.
     * @throws {FlowEditPlanError} Si hay problemas al eliminar el plan.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private deletePlan;
    /**
     * Permite obtener la lista de planes de suscripción 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 del plan
     * @param {FlowListPlansRequest} data Datos para listar los planes.
     * @returns {Promise<FlowListPlansResponse>} Respuesta de la API.
     * @throws {FlowEditPlanError} Si hay problemas al listar los planes.
     * @throws {FlowAPIError} Si hay problemas con la API de Flow.
     */
    private listPlans;
}
//# sourceMappingURL=flow.plans.d.ts.map