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.
47 lines (46 loc) • 2.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 fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const CertificateRelatedError_1 = __importDefault(require("./CertificateRelatedError"));
function Cert2p12(cert) {
if ("path" in cert) {
try {
if (![".p12"].includes(path_1.default.extname(cert.path).toLocaleLowerCase()))
throw new Error();
}
catch (ex) {
throw new CertificateRelatedError_1.default("invalid_cert", "Archivo inválido. Sólo se admiten archivos con extensión .p12");
}
try {
var arrayUint8 = fs_1.default.readFileSync(cert.path);
}
catch (ex) {
throw new CertificateRelatedError_1.default("invalid_cert", "Archivo no se puede leer. Puede que no tenga permisos de lectura o el archivo ya no exista en esa ubicación.");
}
}
else {
arrayUint8 = cert.file;
}
try {
var p12B64 = node_forge_1.default.util.binary.base64.encode(arrayUint8);
var p12Der = node_forge_1.default.util.decode64(p12B64);
var p12Asn1 = node_forge_1.default.asn1.fromDer(p12Der);
var p12 = node_forge_1.default.pkcs12.pkcs12FromAsn1(p12Asn1, cert.password);
return p12;
}
catch (ex) {
if (["Unparsed DER bytes remain after ASN.1 parsing.",
"Too few bytes to read ASN.1 value."].includes(ex.message))
throw new CertificateRelatedError_1.default("invalid_cert", "El certificado no puede ser leído. Puede estar corrupto.");
if (["PKCS#12 MAC could not be verified. Invalid password?"].includes(ex.message)) {
throw new CertificateRelatedError_1.default("wrong_password");
}
throw ex;
}
}
exports.default = Cert2p12;