UNPKG

@nicotordev/flowcl-pagos

Version:

SDK en TypeScript para integrar pagos con la API de Flow.cl de manera sencilla y segura.

172 lines 9.75 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const axios_1 = __importDefault(require("axios")); const errors_1 = require("../errors"); const flow_utils_1 = require("../utils/flow.utils"); const qs_1 = __importDefault(require("qs")); /** * Permite asociar items adicionales a suscripciones. */ class FlowSubscriptionsItems { /** * 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, secretKey, baseURL) { /** * Este servicio permite obtener los datos de un item adicional de suscripción * @param {string} itemId ID del item adicional de suscripción. * @returns {Promise<getAdditionalSubscriptionItemResponse>} Respuesta de la API. * @throws {FlowCreateAdditionalSubscriptionItemError} Si hay problemas al obtener la suscripción adicional. * @throws {FlowAPIError} Si hay problemas con la API de Flow. */ this.get = this.getAdditionalSubscriptionItem.bind(this); /** * Este servicio permite crear un nuevo item adicional de suscripción * @param {FlowCreateAdditionalSubscriptionItemRequest} data Datos de la suscripción adicional. * @returns {Promise<FlowCreateAdditionalSubscriptionItemResponse>} Respuesta de la API. * @throws {FlowCreateAdditionalSubscriptionItemError} Si hay problemas al crear la suscripción adicional. * @throws {FlowAPIError} Si hay problemas con la API de Flow. */ this.create = this.createAdditionalSubscriptionItem.bind(this); /** * Este servicio permite editar un item adicional de suscripción. Se puede editar el nombre, tipo de ajuste, monto y definir si aplica para las suscripciones actuales o solo las futuras. * @param {FlowEditAdditionalSubscriptionItemRequest} data Datos de la suscripción adicional. * @returns {Promise<FlowEditAdditionalSubscriptionItemResponse>} Respuesta de la API. * @throws {FlowEditAdditionalSubscriptionItemError} Si hay problemas al editar la suscripción adicional. * @throws {FlowAPIError} Si hay problemas con la API de Flow. */ this.edit = this.editAdditionalSubscriptionItem.bind(this); /** * Este servicio permite eliminar un item adicional de suscripción. Eliminar un item adicional de suscripción posee 2 tipos de eliminación: solo para suscripciones futuras o para todas las suscripciones que actualmente poseen asociado este item. * @param {string} itemId ID del item adicional de suscripción. * @param {'to_future' | 'all'} changeType Tipo de eliminación. * @returns {Promise<FlowDeleteAdditionalSubscriptionItemResponse>} Respuesta de la API. * @throws {FlowDeleteAdditionalSubscriptionItemError} Si hay problemas al eliminar la suscripción adicional. * @throws {FlowAPIError} Si hay problemas con la API de Flow. */ this.delete = this.deleteAdditionalSubscriptionItem.bind(this); /** * Este servicio permite la lista de items adicionales de suscripción * @param {FlowListAdditionalSubscriptionItemRequest} data Datos de la suscripción adicional. * @returns {Promise<FlowListAdditionalSubscriptionItemResponse>} Respuesta de la API. * @throws {FlowListAdditionalSubscriptionItemError} Si hay problemas al listar la suscripción adicional. * @throws {FlowAPIError} Si hay problemas con la API de Flow. * */ this.list = this.listAdditionalSubscriptionItem.bind(this); if (!apiKey || !secretKey) { throw new errors_1.FlowAuthenticationError(); } this.apiKey = apiKey; this.secretKey = secretKey; // Crear una instancia de Axios con la configuración base this.axiosInstance = axios_1.default.create({ baseURL: `${baseURL}/subscription_item`, headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, }); } /** * 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. */ async request(endpoint, data, method = 'post', error) { try { const allData = { ...data, apiKey: this.apiKey, }; const formData = (0, flow_utils_1.generateFormData)(allData, this.secretKey); const formDataSearchParams = new URLSearchParams(formData); const response = method === 'post' ? await this.axiosInstance.post(`${endpoint}`, qs_1.default.stringify(formData)) : await this.axiosInstance.get(`${endpoint}?${formDataSearchParams}`); return response.data; } catch (err) { if (axios_1.default.isAxiosError(err)) { console.error(JSON.stringify(err.response?.data, null, 2)); throw new errors_1.FlowAPIError(err.response?.status || 500, err.message); } error(err); } } /** * Este servicio permite crear un nuevo item adicional de suscripción * @param {FlowCreateAdditionalSubscriptionItemRequest} data Datos de la suscripción adicional. * @returns {Promise<FlowCreateAdditionalSubscriptionItemResponse>} Respuesta de la API. * @throws {FlowCreateAdditionalSubscriptionItemError} Si hay problemas al crear la suscripción adicional. * @throws {FlowAPIError} Si hay problemas con la API de Flow. */ async createAdditionalSubscriptionItem(data) { return await this.request('/create', data, 'post', (e) => { throw new errors_1.FlowCreateAdditionalSubscriptionItemError(e.message); }); } /** * Este servicio permite obtener los datos de un item adicional de suscripción * @param {string} itemId ID del item adicional de suscripción. * @returns {Promise<getAdditionalSubscriptionItemResponse>} Respuesta de la API. * @throws {FlowCreateAdditionalSubscriptionItemError} Si hay problemas al obtener la suscripción adicional. * @throws {FlowAPIError} Si hay problemas con la API de Flow. */ async getAdditionalSubscriptionItem(itemId) { return await this.request(`/get`, { itemId }, 'get', (e) => { throw new errors_1.FlowGetAdditionalSubscriptionItemError(e.message); }); } /** * Este servicio permite editar un item adicional de suscripción. Se puede editar el nombre, tipo de ajuste, monto y definir si aplica para las suscripciones actuales o solo las futuras. * @param {FlowEditAdditionalSubscriptionItemRequest} data Datos de la suscripción adicional. * @returns {Promise<FlowEditAdditionalSubscriptionItemResponse>} Respuesta de la API. * @throws {FlowEditAdditionalSubscriptionItemError} Si hay problemas al editar la suscripción adicional. * @throws {FlowAPIError} Si hay problemas con la API de Flow. */ async editAdditionalSubscriptionItem(data) { return await this.request('/edit', data, 'post', (e) => { throw new errors_1.FlowEditAdditionalSubscriptionItemError(e.message); }); } /** * Este servicio permite eliminar un item adicional de suscripción. Eliminar un item adicional de suscripción posee 2 tipos de eliminación: solo para suscripciones futuras o para todas las suscripciones que actualmente poseen asociado este item. * @param {string} itemId ID del item adicional de suscripción. * @param {'to_future' | 'all'} changeType Tipo de eliminación. * @returns {Promise<FlowDeleteAdditionalSubscriptionItemResponse>} Respuesta de la API. * @throws {FlowDeleteAdditionalSubscriptionItemError} Si hay problemas al eliminar la suscripción adicional. * @throws {FlowAPIError} Si hay problemas con la API de Flow. */ async deleteAdditionalSubscriptionItem(itemId, changeType) { return await this.request('/delete', { itemId, changeType }, 'post', (e) => { throw new errors_1.FlowDeleteAdditionalSubscriptionItemError(e.message); }); } /** * Este servicio permite la lista de items adicionales de suscripción * @param {FlowListAdditionalSubscriptionItemRequest} data Datos de la suscripción adicional. * @returns {Promise<FlowListAdditionalSubscriptionItemResponse>} Respuesta de la API. * @throws {FlowListAdditionalSubscriptionItemError} Si hay problemas al listar la suscripción adicional. * @throws {FlowAPIError} Si hay problemas con la API de Flow. * */ async listAdditionalSubscriptionItem(data) { return await this.request('/list', data, 'get', (e) => { throw new errors_1.FlowListAdditionalSubscriptionItemError(e.message); }); } } exports.default = FlowSubscriptionsItems; //# sourceMappingURL=flow.subscriptionsItems.js.map