UNPKG

cfdi40

Version:

Libreria para crear y sellar xml cfdi V4.0

66 lines (59 loc) 1.89 kB
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