fiscalapi
Version:
SDK de Node.js para FiscalAPI
59 lines • 7.77 kB
JavaScript
import axios from 'axios';
import https from 'https';
import { FiscalapiHttpClient } from './fiscalapi-http-client';
/**
* Fábrica para crear clientes HTTP para FiscalAPI
*/
export class FiscalapiHttpClientFactory {
/**
* Crea un nuevo cliente HTTP para FiscalAPI
* @param {FiscalapiSettings} settings - Configuración de FiscalAPI
* @returns {IFiscalapiHttpClient} Instancia del cliente HTTP
* @throws {Error} Si la configuración es nula o indefinida
*/
static create(settings) {
if (!settings) {
throw new Error('La configuración no puede ser nula o indefinida');
}
// Crea una clave única para cachear el cliente
const clientKey = `${settings.apiKey}:${settings.tenant}:${settings.apiUrl}`;
// Devuelve el cliente cacheado si existe
if (this.clients.has(clientKey)) {
return this.clients.get(clientKey);
}
// Crea una instancia de Axios configurada
const axiosInstance = this.createAxiosInstance(settings);
// Crea y cachea el cliente
const client = new FiscalapiHttpClient(axiosInstance, settings);
this.clients.set(clientKey, client);
return client;
}
/**
* Crea una instancia de Axios configurada según los ajustes de FiscalAPI
* @param {FiscalapiSettings} settings - Configuración de FiscalAPI
* @returns {AxiosInstance} Instancia de Axios configurada
* @private
*/
static createAxiosInstance(settings) {
// Agente HTTPS que ignora la validación del certificado autofirmado si está en modo depuración
const httpsAgent = new https.Agent({
//rejectUnauthorized: !settings.debug
rejectUnauthorized: false, // Cambiado a true para producción
});
// Crea y configura una nueva instancia de axios
return axios.create({
baseURL: settings.apiUrl,
timeout: 30000, // 30 segundos
headers: {
'X-API-KEY': settings.apiKey,
'X-TENANT-KEY': settings.tenant,
'X-TIMEZONE': settings.timeZone || 'America/Mexico_City',
'Accept': 'application/json',
'Content-Type': 'application/json'
},
httpsAgent: httpsAgent
});
}
}
FiscalapiHttpClientFactory.clients = new Map();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzY2FsYXBpLWh0dHAtY2xpZW50LWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaHR0cC9maXNjYWxhcGktaHR0cC1jbGllbnQtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQXdCLE1BQU0sT0FBTyxDQUFDO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc5RDs7R0FFRztBQUNILE1BQU0sT0FBTywwQkFBMEI7SUFHckM7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQTJCO1FBQzlDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsK0NBQStDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUU3RSx5Q0FBeUM7UUFDekMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUM7UUFDdEMsQ0FBQztRQUVELDBDQUEwQztRQUMxQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFekQsMkJBQTJCO1FBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksbUJBQW1CLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVwQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBMkI7UUFDNUQsK0ZBQStGO1FBQy9GLE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNqQyxxQ0FBcUM7WUFDckMsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGtDQUFrQztTQUM5RCxDQUFDLENBQUM7UUFFSCxnREFBZ0Q7UUFDaEQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTTtZQUN4QixPQUFPLEVBQUUsS0FBSyxFQUFFLGNBQWM7WUFDOUIsT0FBTyxFQUFFO2dCQUNQLFdBQVcsRUFBRSxRQUFRLENBQUMsTUFBTTtnQkFDNUIsY0FBYyxFQUFFLFFBQVEsQ0FBQyxNQUFNO2dCQUMvQixZQUFZLEVBQUUsUUFBUSxDQUFDLFFBQVEsSUFBSSxxQkFBcUI7Z0JBQ3hELFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkM7WUFDRCxVQUFVLEVBQUUsVUFBVTtTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDOztBQXpEYyxrQ0FBTyxHQUFzQyxJQUFJLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zLCB7IEF4aW9zSW5zdGFuY2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHsgRmlzY2FsYXBpU2V0dGluZ3MgfSBmcm9tICcuLi9jb21tb24vZmlzY2FsYXBpLXNldHRpbmdzJztcbmltcG9ydCB7IEZpc2NhbGFwaUh0dHBDbGllbnQgfSBmcm9tICcuL2Zpc2NhbGFwaS1odHRwLWNsaWVudCc7XG5pbXBvcnQgeyBJRmlzY2FsYXBpSHR0cENsaWVudCB9IGZyb20gJy4vZmlzY2FsYXBpLWh0dHAtY2xpZW50LmludGVyZmFjZSc7XG5cbi8qKlxuICogRsOhYnJpY2EgcGFyYSBjcmVhciBjbGllbnRlcyBIVFRQIHBhcmEgRmlzY2FsQVBJXG4gKi9cbmV4cG9ydCBjbGFzcyBGaXNjYWxhcGlIdHRwQ2xpZW50RmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIGNsaWVudHM6IE1hcDxzdHJpbmcsIElGaXNjYWxhcGlIdHRwQ2xpZW50PiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQ3JlYSB1biBudWV2byBjbGllbnRlIEhUVFAgcGFyYSBGaXNjYWxBUElcbiAgICogQHBhcmFtIHtGaXNjYWxhcGlTZXR0aW5nc30gc2V0dGluZ3MgLSBDb25maWd1cmFjacOzbiBkZSBGaXNjYWxBUElcbiAgICogQHJldHVybnMge0lGaXNjYWxhcGlIdHRwQ2xpZW50fSBJbnN0YW5jaWEgZGVsIGNsaWVudGUgSFRUUFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gU2kgbGEgY29uZmlndXJhY2nDs24gZXMgbnVsYSBvIGluZGVmaW5pZGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHNldHRpbmdzOiBGaXNjYWxhcGlTZXR0aW5ncyk6IElGaXNjYWxhcGlIdHRwQ2xpZW50IHtcbiAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xhIGNvbmZpZ3VyYWNpw7NuIG5vIHB1ZWRlIHNlciBudWxhIG8gaW5kZWZpbmlkYScpO1xuICAgIH1cblxuICAgIC8vIENyZWEgdW5hIGNsYXZlIMO6bmljYSBwYXJhIGNhY2hlYXIgZWwgY2xpZW50ZVxuICAgIGNvbnN0IGNsaWVudEtleSA9IGAke3NldHRpbmdzLmFwaUtleX06JHtzZXR0aW5ncy50ZW5hbnR9OiR7c2V0dGluZ3MuYXBpVXJsfWA7XG5cbiAgICAvLyBEZXZ1ZWx2ZSBlbCBjbGllbnRlIGNhY2hlYWRvIHNpIGV4aXN0ZVxuICAgIGlmICh0aGlzLmNsaWVudHMuaGFzKGNsaWVudEtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaWVudHMuZ2V0KGNsaWVudEtleSkhO1xuICAgIH1cblxuICAgIC8vIENyZWEgdW5hIGluc3RhbmNpYSBkZSBBeGlvcyBjb25maWd1cmFkYVxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSB0aGlzLmNyZWF0ZUF4aW9zSW5zdGFuY2Uoc2V0dGluZ3MpO1xuXG4gICAgLy8gQ3JlYSB5IGNhY2hlYSBlbCBjbGllbnRlXG4gICAgY29uc3QgY2xpZW50ID0gbmV3IEZpc2NhbGFwaUh0dHBDbGllbnQoYXhpb3NJbnN0YW5jZSwgc2V0dGluZ3MpO1xuICAgIHRoaXMuY2xpZW50cy5zZXQoY2xpZW50S2V5LCBjbGllbnQpO1xuXG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhIHVuYSBpbnN0YW5jaWEgZGUgQXhpb3MgY29uZmlndXJhZGEgc2Vnw7puIGxvcyBhanVzdGVzIGRlIEZpc2NhbEFQSVxuICAgKiBAcGFyYW0ge0Zpc2NhbGFwaVNldHRpbmdzfSBzZXR0aW5ncyAtIENvbmZpZ3VyYWNpw7NuIGRlIEZpc2NhbEFQSVxuICAgKiBAcmV0dXJucyB7QXhpb3NJbnN0YW5jZX0gSW5zdGFuY2lhIGRlIEF4aW9zIGNvbmZpZ3VyYWRhXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVBeGlvc0luc3RhbmNlKHNldHRpbmdzOiBGaXNjYWxhcGlTZXR0aW5ncyk6IEF4aW9zSW5zdGFuY2Uge1xuICAgIC8vIEFnZW50ZSBIVFRQUyBxdWUgaWdub3JhIGxhIHZhbGlkYWNpw7NuIGRlbCBjZXJ0aWZpY2FkbyBhdXRvZmlybWFkbyBzaSBlc3TDoSBlbiBtb2RvIGRlcHVyYWNpw7NuXG4gICAgY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XG4gICAgICAvL3JlamVjdFVuYXV0aG9yaXplZDogIXNldHRpbmdzLmRlYnVnXG4gICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLCAvLyBDYW1iaWFkbyBhIHRydWUgcGFyYSBwcm9kdWNjacOzblxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYSB5IGNvbmZpZ3VyYSB1bmEgbnVldmEgaW5zdGFuY2lhIGRlIGF4aW9zXG4gICAgcmV0dXJuIGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiBzZXR0aW5ncy5hcGlVcmwsXG4gICAgICB0aW1lb3V0OiAzMDAwMCwgLy8gMzAgc2VndW5kb3NcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ1gtQVBJLUtFWSc6IHNldHRpbmdzLmFwaUtleSxcbiAgICAgICAgJ1gtVEVOQU5ULUtFWSc6IHNldHRpbmdzLnRlbmFudCxcbiAgICAgICAgJ1gtVElNRVpPTkUnOiBzZXR0aW5ncy50aW1lWm9uZSB8fCAnQW1lcmljYS9NZXhpY29fQ2l0eScsXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgIH0sXG4gICAgICBodHRwc0FnZW50OiBodHRwc0FnZW50XG4gICAgfSk7XG4gIH1cbn0iXX0=