cfdi40
Version:
Libreria para crear y sellar xml cfdi V4.0
66 lines (59 loc) • 1.89 kB
JavaScript
const os = require('os')
const fs = require('fs')
const openssl = require('openssl-nodejs')
const spawn = require('child_process').spawn;
const path = require('path');
function getOpenSSLPath() {
if (process.platform === 'win32') {
return "C:\\Program Files\\OpenSSL-Win64\\bin\\openssl.exe"; // ajusta según instalación
}
return "openssl"; // Linux / Mac
}
class certOrKeyPem {
constructor() {}
async generateCertToPem(cert, outPath) {
spawn(getOpenSSLPath(), ['version']);
return new Promise((resolve, reject) => {
const proc = spawn(getOpenSSLPath(), [
'x509',
'-inform', 'DER',
'-in', cert,
'-out', outPath
]);
proc.on('error', (err) => reject(err));
proc.on('close', (code) => {
if (code === 0) resolve(outPath);
else reject(new Error(`OpenSSL exited with code ${code}`));
});
});
}
generateKeyToPem(key, passphrase, outPath) {
return new Promise((resolve, reject) => {
const process = spawn(getOpenSSLPath(), [
'pkcs8',
'-inform', 'DER',
'-in', key,
'-passin', `pass:${passphrase}`,
'-outform', 'PEM',
'-out', outPath
]);
// Capturar errores
process.stderr.on('data', (data) => {
console.error(`[OpenSSL stderr]: ${data.toString()}`);
});
// Ver si el proceso termina con éxito o con error
process.on('close', (code) => {
if (code === 0) {
console.log("Conversión a PEM completada.");
resolve();
} else {
reject(new Error(`OpenSSL falló con código de salida ${code}`));
}
});
process.on('error', (err) => {
reject(err);
});
});
}
}
module.exports = certOrKeyPem