dte-signer-sv
Version:
Sign Digital Tax Documents (DTE) for El Salvador's Ministry of Finance
60 lines • 2.07 kB
JavaScript
import Certificate from "./lib/certificate.js";
import signer from "./lib/signer.js";
import { readFileSync } from 'fs';
/**
* Signs a DTE (Digital Tax Document) for El Salvador using a certificate and private key password.
*
* @param params - The parameters for signing the DTE
* @returns A Promise that resolves to the signed DTE in JWS compact format
*
* @example
* // Example 1: Using certificate file path
* const signedDTE = await signDTE({
* dte: {
* identificacion: {
* version: 1,
* ambiente: "00",
* tipoDte: "01",
* // ... other DTE fields
* }
* },
* privatePassword: "mySecurePassword123",
* certificate: "./certificates/88888888888888.crt",
* loadCertificateFromPath: true
* });
*
* @example
* // Example 2: Using certificate XML content directly
* const certXML = fs.readFileSync("./certificate.crt", "utf8");
* const signedDTE = await signDTE({
* dte: myDTEObject,
* privatePassword: "mySecurePassword123",
* certificate: certXML
* });
*
* @throws {Error} Throws an error if the private password is invalid
* @throws {Error} Throws an error if the certificate cannot be parsed
* @throws {Error} Throws an error if the certificate file is not found (when loadCertificateFromPath is true)
*/
export const signDTE = async (params) => {
const { privatePassword, certificate, loadCertificateFromPath } = params;
let certificateData;
if (loadCertificateFromPath) {
certificateData = readFileSync(certificate, "utf8");
}
else {
certificateData = certificate;
}
const certificateObject = await new Certificate().parseCertificate(certificateData);
const isPrivatePasswordValid = certificateObject.validatePrivatePassword(privatePassword);
if (!isPrivatePasswordValid) {
throw new Error("Invalid private password");
}
const signature = await signer({
dteObject: params.dte,
certificate: certificateObject
});
return signature;
};
export default signDTE;
//# sourceMappingURL=index.js.map