facturacionelectronicapy-setapi
Version:
Módulo NodeJs para enviar el Archivo XML Firmado para la Facturación Electrónica en Paraguay a la SET
869 lines (862 loc) • 69.5 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const jszip_1 = __importDefault(require("jszip"));
const PKCS12_1 = __importDefault(require("./PKCS12"));
const xml2js_1 = __importDefault(require("xml2js"));
const fs_1 = __importDefault(require("fs"));
const worker_threads_1 = require("worker_threads");
const https = require("https");
const axios = require("axios");
class SET {
/**
* Crea los certificados para authenticarse a la SET.
* @param certificado
* @param passphase
* /
/*auth(env: "test" | "prod", certificado: any, passphase: string) {
pkcs12.openFile(certificado, passphase);
this.env = env;
this.cert = pkcs12.getCertificate();
this.key = pkcs12.getPrivateKey();
}
*/
abrir(certificado, passphase) {
PKCS12_1.default.openFile(certificado, passphase);
this.cert = PKCS12_1.default.getCertificate();
this.key = PKCS12_1.default.getPrivateKey();
}
/**
* Consulta un Documento Electronico por CDC
*
* @param cdc
* @returns
*/
consulta(id, cdc, env, certificado, passphase, config) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
try {
let defaultConfig = {
debug: false,
timeout: 90000,
};
defaultConfig = Object.assign(defaultConfig, config);
this.abrir(certificado, passphase);
let url = "https://sifen.set.gov.py/de/ws/consultas/consulta.wsdl";
if (env == "test") {
url = "https://sifen-test.set.gov.py/de/ws/consultas/consulta.wsdl";
}
//console.log("URL invocado...", url);
if (!this.cert) {
reject("Antes debe Autenticarse");
}
if (!this.key) {
reject("Antes debe autenticarse");
}
const httpsAgent = new https.Agent({
cert: Buffer.from(this.cert, "utf8"),
key: Buffer.from(this.key, "utf8"),
});
let soapXMLData = `<?xml version="1.0" encoding="UTF-8"?>\n\
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">\n\
<env:Header/>\n\
<env:Body>\n\
<rEnviConsDeRequest xmlns="http://ekuatia.set.gov.py/sifen/xsd">\n\
<dId>${id}</dId>\n\
<dCDC>${cdc}</dCDC>\n\
</rEnviConsDeRequest>\n\
</env:Body>\n\
</env:Envelope>\n`;
soapXMLData = this.normalizeXML(soapXMLData);
if (defaultConfig.debug === true) {
console.log("soapXMLData", soapXMLData);
}
if (defaultConfig.saveRequestFile) {
const json = fs_1.default.writeFileSync(defaultConfig.saveRequestFile, soapXMLData);
}
axios
.post(`${url}`, soapXMLData, {
headers: {
"User-Agent": "facturaSend",
"Content-Type": "application/xml; charset=utf-8",
},
httpsAgent,
timeout: defaultConfig.timeout,
})
.then((respuestaSuccess) => {
var parser = new xml2js_1.default.Parser({ explicitArray: false });
//console.log("statuscode", respuestaSuccess);
//console.log(respuestaSuccess.status);
if (respuestaSuccess.status == 200) {
if ((respuestaSuccess.data + "").startsWith("<?xml")) {
parser
.parseStringPromise(respuestaSuccess.data)
.then(function (result) {
const resultData = result["env:Envelope"]["env:Body"];
//delete resultData.$;
resultData.id = id;
resolve(resultData);
});
}
else {
if ((respuestaSuccess.data + "").startsWith("<html>")) {
reject(new Error("Error de la SET BIG-IP logout page"));
}
else {
reject(new Error(respuestaSuccess.data + ""));
}
}
}
else {
reject(new Error("Error de conexión con la SET"));
}
})
.catch((err) => {
if (err && err.response && err.response.data) {
var xmlResponse = err.response.data;
var parser = new xml2js_1.default.Parser({ explicitArray: false });
parser
.parseStringPromise(xmlResponse)
.then(function (result) {
const resultData = result["env:Envelope"]["env:Body"];
resultData.id = id;
resolve(resultData);
})
.catch(function (err) {
reject(err);
});
}
else {
reject(err);
}
});
}
catch (error) {
reject(error);
}
}));
}
/**
* Consulta un lote en la SET
* @param id
* @param numeroProtocolo
* @returns
*/
consultaLote2222(id, numeroProtocolo, env, certificado, passphase, config) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
try {
let defaultConfig = {
debug: false,
timeout: 90000,
};
//console.log("El config del params viene ", config);
defaultConfig = Object.assign(defaultConfig, config);
let url = "https://sifen.set.gov.py/de/ws/consultas/consulta-lote.wsdl";
if (env == "test") {
url =
"https://sifen-test.set.gov.py/de/ws/consultas/consulta-lote.wsdl";
}
/*this.abrir(certificado, passphase);
if (!this.cert) {
reject("Antes debe Autenticarse");
}
if (!this.key) {
reject("Antes debe autenticarse");
}*/
/*const httpsAgent = new https.Agent({
cert: Buffer.from(this.cert, "utf8"),
key: Buffer.from(this.key, "utf8"),
});*/
let soapXMLData = `<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">\n\
<env:Header/>\n\
<env:Body>\n\
<rEnviConsLoteDe xmlns="http://ekuatia.set.gov.py/sifen/xsd">\n\
<dId>${id}</dId>\n\
<dProtConsLote>${numeroProtocolo}</dProtConsLote>\n\
</rEnviConsLoteDe>\n\
</env:Body>\n\
</env:Envelope>\n`;
soapXMLData = this.normalizeXML(soapXMLData);
if (defaultConfig.debug === true) {
console.log("soapXMLData", soapXMLData);
}
if (defaultConfig.saveRequestFile) {
const json = fs_1.default.writeFileSync(defaultConfig.saveRequestFile, soapXMLData);
}
console.log("soapXMLData", {
url,
soapXMLData,
id,
certificado,
passphase,
timeout: defaultConfig.timeout,
path: "./workerConsultaSET.ts",
});
const runService = (WorkerData) => {
return new Promise((resolve, reject) => {
const worker = new worker_threads_1.Worker("./workerConsultaLote", {
workerData: {
url,
soapXMLData,
certificado,
passphase,
id,
timeout: defaultConfig.timeout,
path: "./workerConsultaLote.ts",
},
});
worker.on("message", resolve);
worker.on("error", reject);
worker.on("exit", (code) => {
if (code !== 0)
reject(new Error(`stopped with ${code} exit code`));
});
});
};
const run = () => __awaiter(this, void 0, void 0, function* () {
const result = yield runService("hello node.js");
console.log(result);
});
run().catch((err) => console.error(err));
/*
axios
.post(`${url}`, soapXMLData, {
headers: {
"User-Agent": "facturaSend",
"Content-Type": "application/xml; charset=utf-8",
},
httpsAgent,
timeout: defaultConfig.timeout,
})
.then((respuestaSuccess: any) => {
var parser = new xml2js.Parser({ explicitArray: false });
if (respuestaSuccess.status == 200) {
if ((respuestaSuccess.data + "").startsWith("<?xml")) {
parser
.parseStringPromise(respuestaSuccess.data)
.then(function (result) {
const resultData = JSON.parse(
JSON.stringify(result["env:Envelope"]["env:Body"])
);
resultData.id = id;
resolve(resultData);
});
} else {
if ((respuestaSuccess.data + "").startsWith("<html>")) {
reject(new Error("Error de la SET BIG-IP logout page"));
} else {
reject(new Error(respuestaSuccess.data + ""));
}
}
} else {
reject(new Error("Error de conexión con la SET"));
}
})
.catch((err: any) => {
console.log("CAtch en error 1111", err);
if (err && err.response && err.response.data) {
var xmlResponse = err.response.data;
var parser = new xml2js.Parser({ explicitArray: false });
parser
.parseStringPromise(xmlResponse)
.then(function (result) {
resolve(result["env:Envelope"]["env:Body"]);
})
.catch(function (err) {
reject(err);
});
} else {
reject(err);
}
});
*/
}
catch (error) {
console.log("CAtch en error 2222", error);
reject(error);
}
}));
}
/**
* Consulta un lote en la SET
* @param id
* @param numeroProtocolo
* @returns
*/
consultaLote(id, numeroProtocolo, env, certificado, passphase, config) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
try {
let defaultConfig = {
debug: false,
timeout: 90000,
};
//console.log("El config del params viene ", config);
defaultConfig = Object.assign(defaultConfig, config);
this.abrir(certificado, passphase);
let url = "https://sifen.set.gov.py/de/ws/consultas/consulta-lote.wsdl";
if (env == "test") {
url =
"https://sifen-test.set.gov.py/de/ws/consultas/consulta-lote.wsdl";
}
if (!this.cert) {
reject("Antes debe Autenticarse");
}
if (!this.key) {
reject("Antes debe autenticarse");
}
const httpsAgent = new https.Agent({
cert: Buffer.from(this.cert, "utf8"),
key: Buffer.from(this.key, "utf8"),
});
let soapXMLData = `<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">\n\
<env:Header/>\n\
<env:Body>\n\
<rEnviConsLoteDe xmlns="http://ekuatia.set.gov.py/sifen/xsd">\n\
<dId>${id}</dId>\n\
<dProtConsLote>${numeroProtocolo}</dProtConsLote>\n\
</rEnviConsLoteDe>\n\
</env:Body>\n\
</env:Envelope>\n`;
soapXMLData = this.normalizeXML(soapXMLData);
if (defaultConfig.debug === true) {
console.log("url", url, "consultaLote-soapXMLData", soapXMLData);
}
if (defaultConfig.saveRequestFile) {
const json = fs_1.default.writeFileSync(defaultConfig.saveRequestFile, soapXMLData);
}
axios
.post(`${url}`, soapXMLData, {
headers: {
"User-Agent": "facturaSend",
"Content-Type": "application/xml; charset=utf-8",
},
httpsAgent,
timeout: defaultConfig.timeout,
})
.then((respuestaSuccess) => {
var parser = new xml2js_1.default.Parser({ explicitArray: false });
if (respuestaSuccess.status == 200) {
if ((respuestaSuccess.data + "").startsWith("<?xml")) {
parser
.parseStringPromise(respuestaSuccess.data)
.then(function (result) {
const resultData = JSON.parse(JSON.stringify(result["env:Envelope"]["env:Body"]));
resultData.id = id;
resolve(resultData);
});
}
else {
if ((respuestaSuccess.data + "").startsWith("<html>")) {
reject(new Error("Error de la SET BIG-IP logout page"));
}
else {
reject(new Error(respuestaSuccess.data + ""));
}
}
}
else {
reject(new Error("Error de conexión con la SET"));
}
})
.catch((err) => {
console.log("CAtch en error 1111", err);
if (err && err.response && err.response.data) {
var xmlResponse = err.response.data;
var parser = new xml2js_1.default.Parser({ explicitArray: false });
parser
.parseStringPromise(xmlResponse)
.then(function (result) {
resolve(result["env:Envelope"]["env:Body"]);
})
.catch(function (err) {
reject(err);
});
}
else {
reject(err);
}
});
}
catch (error) {
console.log("CAtch en error 2222", error);
reject(error);
}
}));
}
/**
*
* @param xml
* @returns
*/
consultaRUC(id, ruc, env, certificado, passphase, config) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
try {
let defaultConfig = {
debug: false,
timeout: 90000,
};
defaultConfig = Object.assign(defaultConfig, config);
this.abrir(certificado, passphase);
let url = "https://sifen.set.gov.py/de/ws/consultas/consulta-ruc.wsdl";
if (env == "test") {
url =
"https://sifen-test.set.gov.py/de/ws/consultas/consulta-ruc.wsdl";
}
if (!this.cert) {
reject("Antes debe Autenticarse");
}
if (!this.key) {
reject("Antes debe autenticarse");
}
const httpsAgent = new https.Agent({
cert: Buffer.from(this.cert, "utf8"),
key: Buffer.from(this.key, "utf8"),
});
let soapXMLData = `<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">\n\
<env:Header/>\n\
<env:Body>\n\
<rEnviConsRUC xmlns="http://ekuatia.set.gov.py/sifen/xsd">\n\
<dId>${id}</dId>\n\
<dRUCCons>${ruc}</dRUCCons>\n\
</rEnviConsRUC>\n\
</env:Body>\n\
</env:Envelope>\n`;
soapXMLData = this.normalizeXML(soapXMLData);
if (defaultConfig.debug === true) {
console.log("soapXMLData", soapXMLData);
}
if (defaultConfig.saveRequestFile) {
const json = fs_1.default.writeFileSync(defaultConfig.saveRequestFile, soapXMLData);
}
axios
.post(`${url}`, soapXMLData, {
headers: {
"User-Agent": "facturaSend",
"Content-Type": "application/xml; charset=utf-8",
},
httpsAgent,
timeout: defaultConfig.timeout,
})
.then((respuestaSuccess) => {
var parser = new xml2js_1.default.Parser({ explicitArray: false });
//console.log("respuestaSuccess.data", respuestaSuccess.data);
//console.log("statuscode", respuestaSuccess.status);
////console.log(respuestaSuccess.statusCode);
if (respuestaSuccess.status == 200) {
if ((respuestaSuccess.data + "").startsWith("<?xml")) {
parser
.parseStringPromise(respuestaSuccess.data)
.then(function (result) {
const resultData = result["env:Envelope"]["env:Body"];
resultData.id = id;
resolve(resultData);
});
}
else {
if ((respuestaSuccess.data + "").startsWith("<html>")) {
reject(new Error("Error de la SET BIG-IP logout page"));
}
else {
reject(new Error(respuestaSuccess.data + ""));
}
}
}
else {
//reject(new Error("Error en la respuesta de comunicación con la SET " + respuestaSuccess.data));
reject(new Error("Error de conexión con la SET"));
}
})
.catch((err) => {
if (err && err.response && err.response.data) {
var xmlResponse = err.response.data;
var parser = new xml2js_1.default.Parser({ explicitArray: false });
parser
.parseStringPromise(xmlResponse)
.then(function (result) {
const resultData = result["env:Envelope"]["env:Body"];
resultData.id = id;
resolve(resultData);
})
.catch(function (err) {
reject(err);
});
}
else {
reject(err);
}
});
}
catch (error) {
reject(error);
}
}));
}
/**
* Envia el Documento electronico a la SET
* https://sifen.set.gov.py/de/ws/sync/recibe.wsdl
* @param xml
* @returns
*/
recibe(id, xml, env, certificado, passphase, config) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
try {
let defaultConfig = {
debug: false,
timeout: 90000,
};
defaultConfig = Object.assign(defaultConfig, config);
this.abrir(certificado, passphase);
let url = "https://sifen.set.gov.py/de/ws/sync/recibe.wsdl";
if (env == "test") {
url = "https://sifen-test.set.gov.py/de/ws/sync/recibe.wsdl";
}
if (!this.cert) {
reject("Antes debe Autenticarse");
}
if (!this.key) {
reject("Antes debe autenticarse");
}
const httpsAgent = new https.Agent({
cert: Buffer.from(this.cert, "utf8"),
key: Buffer.from(this.key, "utf8"),
});
xml = xml.split("\n").slice(1).join("\n"); //Retirar <xml>
let soapXMLData = `<?xml version="1.0" encoding="UTF-8"?>\n\
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">\n\
<env:Header/>\n\
<env:Body>\n\
<rEnviDe xmlns="http://ekuatia.set.gov.py/sifen/xsd">\n\
<dId>${id}</dId>\n\
<xDE>${xml}</xDE>\n\
</rEnviDe>\n\
</env:Body>\n\
</env:Envelope>\n`;
soapXMLData = this.normalizeXML(soapXMLData);
if (defaultConfig.debug === true) {
console.log("url", url, "recibe - soapXMLData", soapXMLData);
}
if (defaultConfig.saveRequestFile) {
const json = fs_1.default.writeFileSync(defaultConfig.saveRequestFile, soapXMLData);
}
axios
.post(`${url}`, soapXMLData, {
headers: {
"User-Agent": "facturaSend",
"Content-Type": "application/xml; charset=utf-8",
},
httpsAgent,
timeout: defaultConfig.timeout,
})
.then((respuestaSuccess) => {
var parser = new xml2js_1.default.Parser({ explicitArray: false });
if (respuestaSuccess.status == 200) {
if ((respuestaSuccess.data + "").startsWith("<?xml")) {
parser
.parseStringPromise(respuestaSuccess.data)
.then(function (result) {
//resolve(result['env:Envelope']['env:Body']);
const resultData =
//result["env:Envelope"]["env:Body"]["ns2:rRetEnviDe"];
result["env:Envelope"]["env:Body"];
//delete resultData.$;
resultData["id"] = id;
resolve(resultData);
});
}
else {
if ((respuestaSuccess.data + "").startsWith("<html>")) {
//console.log("setApi - recibe " + respuestaSuccess.data);
reject(new Error("Error de la SET BIG-IP logout page"));
}
else {
reject(new Error(respuestaSuccess.data + ""));
}
}
}
else {
//reject(new Error("Error en la respuesta de comunicación con la SET " + respuestaSuccess.data));
reject(new Error("Error de conexión con la SET"));
}
})
.catch((err) => {
if (err && err.response && err.response.data) {
var xmlResponse = err.response.data;
var parser = new xml2js_1.default.Parser({ explicitArray: false });
parser
.parseStringPromise(xmlResponse)
.then(function (result) {
const resultData = result["env:Envelope"]["env:Body"];
resultData["id"] = id;
resolve(resultData);
})
.catch(function (err) {
reject(err);
});
}
else {
reject(err);
}
});
}
catch (error) {
reject(error);
}
}));
}
/**
* Envia el Documento electronico por lote a la SET
* https://sifen.set.gov.py/de/ws/async/recibe-lote.wsdl
* @param xmls
* @returns
*/
recibeLote(id, xmls, env, certificado, passphase, config) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
try {
let defaultConfig = {
debug: false,
timeout: 90000,
};
defaultConfig = Object.assign(defaultConfig, config);
this.abrir(certificado, passphase);
if (xmls.length == 0) {
reject("No se envió datos en el array de Documentos electrónicos XMLs");
}
if (xmls.length > 50) {
reject("Sólo se permiten un máximo de 50 Documentos electrónicos XML por lote");
}
let url = "https://sifen.set.gov.py/de/ws/async/recibe-lote.wsdl";
if (env == "test") {
url = "https://sifen-test.set.gov.py/de/ws/async/recibe-lote.wsdl";
}
if (!this.cert) {
reject("Antes debe Autenticarse");
}
if (!this.key) {
reject("Antes debe autenticarse");
}
const zip = new jszip_1.default();
let rLoteDEXml = `<rLoteDE>\n`;
for (let i = 0; i < xmls.length; i++) {
//const xml = xmls[i];
const xml = xmls[i].split("\n").slice(1).join("\n"); //Retirar xml
rLoteDEXml += `${xml}\n`;
}
rLoteDEXml += `</rLoteDE>`;
rLoteDEXml = this.normalizeXML(rLoteDEXml);
zip.file(`xml_file.xml`, `<?xml version="1.0" encoding="UTF-8"?>${rLoteDEXml}`);
const zipAsBase64 = yield zip.generateAsync({ type: "base64" });
//fs.writeFileSync(__dirname + '/zipped.zip', zipAsBase64);
const httpsAgent = new https.Agent({
cert: Buffer.from(this.cert, "utf8"),
key: Buffer.from(this.key, "utf8"),
});
//axios.get(`${url}`, { httpsAgent }).then((respuesta: any) => {
let soapXMLData = `<?xml version="1.0" encoding="UTF-8"?>\n\
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">\n\
<env:Header/>\n\
<env:Body>\n\
<rEnvioLote xmlns="http://ekuatia.set.gov.py/sifen/xsd">\n\
<dId>${id}</dId>\n\
<xDE>${zipAsBase64}</xDE>\n\
</rEnvioLote>\n\
</env:Body>\n\
</env:Envelope>\n`;
soapXMLData = this.normalizeXML(soapXMLData);
if (defaultConfig.debug === true) {
console.log("url", url, "soapXMLData", soapXMLData);
}
if (defaultConfig.saveRequestFile) {
const json = fs_1.default.writeFileSync(defaultConfig.saveRequestFile, soapXMLData);
}
axios
.post(`${url}`, soapXMLData, {
headers: {
"User-Agent": "facturaSend",
"Content-Type": "application/xml; charset=utf-8",
},
httpsAgent,
timeout: defaultConfig.timeout,
})
.then((respuestaSuccess) => {
var parser = new xml2js_1.default.Parser({ explicitArray: false });
if (respuestaSuccess.status == 200) {
if ((respuestaSuccess.data + "").startsWith("<?xml")) {
parser
.parseStringPromise(respuestaSuccess.data)
.then(function (result) {
//resolve(result['env:Envelope']['env:Body']['ns2:rResEnviLoteDe']);
const resultData =
//result["env:Envelope"]["env:Body"]["ns2:rResEnviLoteDe"];
result["env:Envelope"]["env:Body"];
resultData["id"] = id;
//result['env:Envelope']['env:Body']['ns2:rResEnviLoteDe']['id'] = id;
//const resultData = result['env:Envelope']['env:Body'];
delete resultData.$;
resolve(resultData);
});
}
else {
if ((respuestaSuccess.data + "").startsWith("<html>")) {
//console.log("setApi - recibe " + respuestaSuccess.data);
reject(new Error("Error de la SET BIG-IP logout page"));
}
else {
reject(new Error(respuestaSuccess.data + ""));
}
}
}
else {
reject(new Error("Error de conexión con la SET"));
}
})
.catch((err) => {
if (err && err.response && err.response.data) {
var xmlResponse = err.response.data;
var parser = new xml2js_1.default.Parser({ explicitArray: false });
parser
.parseStringPromise(xmlResponse)
.then(function (result) {
const resultData =
/*result["env:Envelope"]["env:Body"]["ns2:rRetEnviDe"][
"ns2:rProtDe"
];*/
result["env:Envelope"]["env:Body"];
resultData["id"] = id;
resolve(resultData);
})
.catch(function (err) {
reject(err);
});
}
else {
reject(err);
}
});
}
catch (error) {
reject(error);
}
}));
}
/**
*
* @param xml
* @returns
*/
evento(id, xml, env, certificado, passphase, config) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
try {
let defaultConfig = {
debug: false,
timeout: 90000,
};
defaultConfig = Object.assign(defaultConfig, config);
this.abrir(certificado, passphase);
let url = "https://sifen.set.gov.py/de/ws/eventos/evento.wsdl";
if (env == "test") {
url = "https://sifen-test.set.gov.py/de/ws/eventos/evento.wsdl";
}
if (!this.cert) {
reject("Antes debe Autenticarse");
}
if (!this.key) {
reject("Antes debe autenticarse");
}
const httpsAgent = new https.Agent({
cert: Buffer.from(this.cert, "utf8"),
key: Buffer.from(this.key, "utf8"),
});
let soapXMLData = this.normalizeXML(xml); //Para el evento, el xml ya viene con SoapData
if (defaultConfig.debug === true) {
console.log("soapXMLData", soapXMLData);
}
if (defaultConfig.saveRequestFile) {
const json = fs_1.default.writeFileSync(defaultConfig.saveRequestFile, soapXMLData);
}
axios
.post(`${url}`, soapXMLData, {
headers: {
"User-Agent": "facturaSend",
"Content-Type": "application/xml; charset=utf-8",
},
httpsAgent,
timeout: defaultConfig.timeout,
})
.then((respuestaSuccess) => {
var parser = new xml2js_1.default.Parser({ explicitArray: false });
if (respuestaSuccess.status == 200) {
if ((respuestaSuccess.data + "").startsWith("<?xml")) {
parser
.parseStringPromise(respuestaSuccess.data)
.then(function (result) {
///resolve(result['env:Envelope']['env:Body']);
const resultData = result["env:Envelope"]["env:Body"];
resultData.id = id;
//delete resultData.$;
resolve(resultData);
});
}
else {
if ((respuestaSuccess.data + "").startsWith("<html>")) {
//console.log("setApi - recibe " + respuestaSuccess.data);
reject(new Error("Error de la SET BIG-IP logout page"));
}
else {
reject(new Error(respuestaSuccess.data + ""));
}
}
}
else {
reject(new Error("Error de conexión con la SET"));
}
})
.catch((err) => {
if (err && err.response && err.response.data) {
var xmlResponse = err.response.data;
var parser = new xml2js_1.default.Parser({ explicitArray: false });
parser
.parseStringPromise(xmlResponse)
.then(function (result) {
const resultData = result["env:Envelope"]["env:Body"];
resultData.id = id;
resolve(resultData);
})
.catch(function (err) {
reject(err);
});
}
else {
reject(err);
}
});
}
catch (error) {
reject(error);
}
}));
});
}
normalizeXML(xml) {
xml = xml.split("\r\n").join("");
xml = xml.split("\n").join("");
xml = xml.split("\t").join("");
xml = xml.split(" ").join("");
xml = xml.split("> <").join("><");
xml = xml.split("> <").join("><");
xml = xml.replace(/\r?\n|\r/g, "");
return xml;
}
}
exports.default = new SET();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU0VULmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NFVC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQixzREFBOEI7QUFDOUIsb0RBQTRCO0FBQzVCLDRDQUFvQjtBQUVwQixtREFBd0M7QUFFeEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUUvQixNQUFNLEdBQUc7SUFLUDs7Ozs7Ozs7Ozs7TUFXRTtJQUVGLEtBQUssQ0FBQyxXQUFnQixFQUFFLFNBQWlCO1FBQ3ZDLGdCQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxnQkFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsQ0FDTixFQUFVLEVBQ1YsR0FBVyxFQUNYLEdBQW9CLEVBQ3BCLFdBQWdCLEVBQ2hCLFNBQWMsRUFDZCxNQUFxQjtRQUVyQixPQUFPLElBQUksT0FBTyxDQUFDLENBQU8sT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNDLElBQUk7Z0JBQ0YsSUFBSSxhQUFhLEdBQWlCO29CQUNoQyxLQUFLLEVBQUUsS0FBSztvQkFDWixPQUFPLEVBQUUsS0FBSztpQkFDZixDQUFDO2dCQUVGLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRW5DLElBQUksR0FBRyxHQUFHLHdEQUF3RCxDQUFDO2dCQUNuRSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUU7b0JBQ2pCLEdBQUcsR0FBRyw2REFBNkQsQ0FBQztpQkFDckU7Z0JBQ0Qsc0NBQXNDO2dCQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDZCxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztpQkFDbkM7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7aUJBQ25DO2dCQUVELE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztvQkFDakMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7b0JBQ3BDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO2lCQUNuQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxXQUFXLEdBQUc7Ozs7O3lDQUtlLEVBQUU7MENBQ0QsR0FBRzs7OzBDQUdILENBQUM7Z0JBQ25DLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUU3QyxJQUFJLGFBQWEsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFO29CQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDekM7Z0JBQ0QsSUFBSSxhQUFhLENBQUMsZUFBZSxFQUFFO29CQUNqQyxNQUFNLElBQUksR0FBRyxZQUFFLENBQUMsYUFBYSxDQUMzQixhQUFhLENBQUMsZUFBZSxFQUM3QixXQUFXLENBQ1osQ0FBQztpQkFDSDtnQkFFRCxLQUFLO3FCQUNGLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRTtvQkFDM0IsT0FBTyxFQUFFO3dCQUNQLFlBQVksRUFBRSxhQUFhO3dCQUMzQixjQUFjLEVBQUUsZ0NBQWdDO3FCQUNqRDtvQkFDRCxVQUFVO29CQUNWLE9BQU8sRUFBRSxhQUFhLENBQUMsT0FBTztpQkFDL0IsQ0FBQztxQkFDRCxJQUFJLENBQUMsQ0FBQyxnQkFBcUIsRUFBRSxFQUFFO29CQUM5QixJQUFJLE1BQU0sR0FBRyxJQUFJLGdCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBRXpELDhDQUE4QztvQkFDOUMsdUNBQXVDO29CQUV2QyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7d0JBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNwRCxNQUFNO2lDQUNILGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQztpQ0FDekMsSUFBSSxDQUFDLFVBQVUsTUFBTTtnQ0FDcEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dDQUN0RCxzQkFBc0I7Z0NBQ3RCLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dDQUNuQixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3RCLENBQUMsQ0FBQyxDQUFDO3lCQUNOOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dDQUNyRCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDOzZCQUN6RDtpQ0FBTTtnQ0FDTCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7NkJBQy9DO3lCQUNGO3FCQUNGO3lCQUFNO3dCQUNMLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7cUJBQ25EO2dCQUNILENBQUMsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDbEIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTt3QkFDNUMsSUFBSSxXQUFXLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ3BDLElBQUksTUFBTSxHQUFHLElBQUksZ0JBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFFekQsTUFBTTs2QkFDSCxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7NkJBQy9CLElBQUksQ0FBQyxVQUFVLE1BQU07NEJBQ3BCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDdEQsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7NEJBQ25CLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDdEIsQ0FBQyxDQUFDOzZCQUNELEtBQUssQ0FBQyxVQUFVLEdBQUc7NEJBQ2xCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDZCxDQUFDLENBQUMsQ0FBQztxQkFDTjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ2I7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNmO1FBQ0gsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUNkLEVBQVUsRUFDVixlQUF1QixFQUN2QixHQUFvQixFQUNwQixXQUFnQixFQUNoQixTQUFjLEVBQ2QsTUFBcUI7UUFFckIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFPLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxJQUFJO2dCQUNGLElBQUksYUFBYSxHQUFpQjtvQkFDaEMsS0FBSyxFQUFFLEtBQUs7b0JBQ1osT0FBTyxFQUFFLEtBQUs7aUJBQ2YsQ0FBQztnQkFFRixxREFBcUQ7Z0JBRXJELGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFckQsSUFBSSxHQUFHLEdBQUcsNkRBQTZELENBQUM7Z0JBQ3hFLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRTtvQkFDakIsR0FBRzt3QkFDRCxrRUFBa0UsQ0FBQztpQkFDdEU7Z0JBRUQ7Ozs7Ozs7O21CQVFHO2dCQUVIOzs7cUJBR0s7Z0JBRUwsSUFBSSxXQUFXLEdBQUc7Ozs7MkNBSWlCLEVBQUU7cURBQ1EsZUFBZTs7OzBDQUcxQixDQUFDO2dCQUVuQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFN0MsSUFBSSxhQUFhLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtvQkFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ3pDO2dCQUVELElBQUksYUFBYSxDQUFDLGVBQWUsRUFBRTtvQkFDakMsTUFBTSxJQUFJLEdBQUcsWUFBRSxDQUFDLGFBQWEsQ0FDM0IsYUFBYSxDQUFDLGVBQWUsRUFDN0IsV0FBVyxDQUNaLENBQUM7aUJBQ0g7Z0JBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUU7b0JBQ3pCLEdBQUc7b0JBQ0gsV0FBVztvQkFDWCxFQUFFO29CQUNGLFdBQVc7b0JBQ1gsU0FBUztvQkFDVCxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87b0JBRTlCLElBQUksRUFBRSx3QkFBd0I7aUJBQy9CLENBQUMsQ0FBQztnQkFFSCxNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQWUsRUFBRSxFQUFFO29CQUNyQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO3dCQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLHVCQUFNLENBQUMsc0JBQXNCLEVBQUU7NEJBQ2hELFVBQVUsRUFBRTtnQ0FDVixHQUFHO2dDQUNILFdBQVc7Z0NBQ1gsV0FBVztnQ0FDWCxTQUFTO2dDQUNULEVBQUU7Z0NBQ0YsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPO2dDQUU5QixJQUFJLEVBQUUseUJBQXlCOzZCQUNoQzt5QkFDRixDQUFDLENBQUM7d0JBRUgsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBRTlCLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUUzQixNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUN6QixJQUFJLElBQUksS0FBSyxDQUFDO2dDQUNaLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDO3dCQUN6RCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUM7Z0JBRUYsTUFBTSxHQUFHLEdBQUcsR0FBUyxFQUFFO29CQUNyQixNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFFakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEIsQ0FBQyxDQUFBLENBQUM7Z0JBRUYsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRXpDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkF3REk7YUFDTDtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNmO1FBQ0gsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVksQ0FDVixFQUFVLEVBQ1YsZUFBdUIsRUFDdkIsR0FBb0IsRUFDcEIsV0FBZ0IsRUFDaEIsU0FBYyxFQUNkLE1BQXFCO1FBRXJCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBTyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDM0MsSUFBSTtnQkFDRixJQUFJLGFBQWEsR0FBaUI7b0JBQ2hDLEtBQUssRUFBRSxLQUFLO29CQUNaLE9BQU8sRUFBRSxLQUFLO2lCQUNmLENBQUM7Z0JBRUYscURBQXFEO2dCQUVyRCxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXJELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUVuQyxJQUFJLEdBQUcsR0FBRyw2REFBNkQsQ0FBQztnQkFDeEUsSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFO29CQUNqQixHQUFHO3dCQUNELGtFQUFrRSxDQUFDO2lCQUN0RTtnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDZCxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztpQkFDbkM7Z0JBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7aUJBQ25DO2dCQUVELE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztvQkFDakMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7b0JBQ3BDLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO2lCQUNuQyxDQUFDLENBQUM7Z0JBRUgsSUFBSSxXQUFXLEdBQUc7Ozs7MkNBSWlCLEVBQUU7cURBQ1EsZUFBZTs7OzBDQUcxQixDQUFDO2dCQUVuQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFN0MsSUFBSSxhQUFhLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtvQkFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLDBCQUEwQixFQUFFLFdBQVcsQ0FBQyxDQUFDO2lCQUNsRTtnQkFFRCxJQUFJLGFBQWEsQ0FBQyxlQUFlLEVBQUU7b0JBQ2pDLE1BQU0sSUFBSSxHQUFHLFlBQUUsQ0FBQyxhQUFhLENBQzNCLGFBQWEsQ0FBQyxlQUFlLEVBQzdCLFdBQVcsQ0FDWixDQUFDO2lCQUNIO2dCQUVELEtBQUs7cUJBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsV0FBVyxFQUFFO29CQUMzQixPQUFPLEVBQUU7d0JBQ1AsWUFBWSxFQUFFLGFBQWE7d0JBQzNCLGNBQWMsRUFBRSxnQ0FBZ0M7cUJBQ2pEO29CQUNELFVBQVU7b0JBQ1YsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPO2lCQUMvQixDQUFDO3FCQUNELEl