envio-comprobantes-sri
Version:
Envia comprobantes electronicos al SRI (Ecuador). Recibe un objeto JSON. Lo convierte a XML, lo firma, lo envía al servicio web del SRI y devuelve la respuesta.
67 lines (66 loc) • 3.05 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_forge_1 = __importDefault(require("node-forge"));
const CertificateRelatedError_1 = __importDefault(require("./CertificateRelatedError"));
function Certp12Info(p12Cert) {
var certBags = p12Cert.getBags({ bagType: node_forge_1.default.pki.oids.certBag });
var cert = certBags[node_forge_1.default.pki.oids.certBag][0].cert;
if (!cert)
throw new CertificateRelatedError_1.default("cert_bags_missing");
if (cert.issuer.getField("O")?.value === "SECURITY DATA S.A. 2")
return {
validFrom: cert.validity.notBefore,
validTo: cert.validity.notAfter,
organizationName: getExtensionValue(cert, "1.3.6.1.4.1.37746.3.10"),
organizationSerialNumber: getExtensionValue(cert, "1.3.6.1.4.1.37746.3.11"),
emailAddress: getExtensionValue(cert, "2.5.29.17"),
subjectName: p12Cert.safeContents[0]?.safeBags[0]?.attributes.friendlyName[0],
subjectSerialNumber: getExtensionValue(cert, "1.3.6.1.4.1.37746.3.1"),
commonName: cert.subject.getField("CN")?.value,
issuerCommonName: cert.issuer.getField("CN")?.value
};
return {
validFrom: cert.validity.notBefore,
validTo: cert.validity.notAfter
/** RUC de la empresa | en el caso de UNATACA S.A. el formato es {texto}-{RUC}. */
,
organizationName: cert.subject.getField("O")?.value,
organizationSerialNumber: cert.subject.getField({ type: "2.5.4.97" })?.value,
emailAddress: cert.subject.getField("E")?.value
/** Nombre de la persona */
,
subjectName: ((cert.subject.getField({ name: "givenName" })?.value || "") + " " + (cert.subject.getField({ name: "surname" })?.value || "")).trim()
/** Cedula de la persona | en el caso de UNATACA S.A. el formato es {texto}-{cedula}. */
,
subjectSerialNumber: cert.subject.getField({ name: "serialNumber" })?.value
/** Generalmente es: {cedula} {nombre} */
,
commonName: cert.subject.getField("CN")?.value
/** Nombre del emisor del certificado */
,
issuerCommonName: cert.issuer.getField("CN")?.value
};
}
exports.default = Certp12Info;
function getExtensionValue(cert, id) {
var extension = cert.extensions.find(x => x.id === id);
if (!extension)
return;
var value = extension.value;
if (extension.altNames && extension.altNames[0]) {
value = extension.altNames[0].value;
}
var value = (value || "").trim();
/*
\u00C0-\u00FF Latin-1 Supplement
\u0100-\u017F Latin Extended-A
\u0180-\u024F Latin Extended-B
\u1E00-\u1EFF Latin Extended Additional
*/
if (!/[a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u024F]|[0-9]/.test(value[0]))
return value.substring(1);
return value;
}