UNPKG

@nodecfdi/cfdiutils-core

Version:
1 lines 41.1 kB
{"version":3,"file":"cfdiutils-core.cjs","sources":["../../src/certificado/cer-retriever.ts","../../src/cadena-origen/cfdi-default-locations.ts","../../src/xml-resolver/xml-resolver.ts","../../src/xml-resolver/xml-resolver-property-trait.ts","../../src/version-discovery/dom-element-container.ts","../../src/version-discovery/node-container.ts","../../src/version-discovery/version-discoverer.ts","../../src/timbre-fiscal-digital/tfd-version.ts","../../src/cadena-origen/xslt-builder-property-trait.ts","../../src/cadena-origen/abstract-xslt-builder.ts","../../src/cadena-origen/xslt-build-exception.ts","../../src/cadena-origen/saxonb-cli-builder.ts","../../src/timbre-fiscal-digital/tfd-cadena-de-origen.ts","../../src/certificado/certificado-property-trait.ts","../../src/certificado/node-certificado.ts","../../src/certificado/sat-certificate-number.ts"],"sourcesContent":["import { Certificate } from '@nodecfdi/credentials';\nimport { AbstractBaseRetriever, DownloaderInterface, RetrieverInterface } from '@nodecfdi/xml-resource-retriever';\nimport { unlink } from 'fs';\n\nexport class CerRetriever extends AbstractBaseRetriever implements RetrieverInterface {\n constructor(basePath: string, downloader?: DownloaderInterface) {\n super(basePath, downloader);\n }\n\n protected checkIsValidDownloadedFile(source: string, localPath: string): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n try {\n Certificate.openFile(localPath);\n\n return resolve();\n } catch (e) {\n unlink(localPath, () => {\n return reject(new Error(`The source ${source} is not a cer file`));\n });\n }\n });\n }\n\n public async retrieve(url: string): Promise<string> {\n this.clearHistory();\n const localFileName = await this.download(url);\n this.addToHistory(url, localFileName);\n\n return localFileName;\n }\n}\n","export class CfdiDefaultLocations {\n public static XSLT_32 = 'http://www.sat.gob.mx/sitio_internet/cfd/3/cadenaoriginal_3_2/cadenaoriginal_3_2.xslt';\n\n public static XSLT_33 = 'http://www.sat.gob.mx/sitio_internet/cfd/3/cadenaoriginal_3_3/cadenaoriginal_3_3.xslt';\n\n public static XSLT_40 = 'http://www.sat.gob.mx/sitio_internet/cfd/4/cadenaoriginal_4_0/cadenaoriginal_4_0.xslt';\n\n public static location(version: string): string {\n if ('4.0' === version) {\n return CfdiDefaultLocations.XSLT_40;\n }\n if ('3.3' === version) {\n return CfdiDefaultLocations.XSLT_33;\n }\n if ('3.2' === version) {\n return CfdiDefaultLocations.XSLT_32;\n }\n throw new Error(`Cannot get the default xslt location for version ${version}`);\n }\n}\n","import {\n DownloaderInterface,\n NodeDownloader,\n RetrieverInterface,\n XsdRetriever,\n XsltRetriever\n} from '@nodecfdi/xml-resource-retriever';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport { CerRetriever } from '../certificado/cer-retriever';\nimport { CfdiDefaultLocations } from '../cadena-origen/cfdi-default-locations';\n\n/**\n * XmlResolver - Class to download xml resources from internet to local paths\n */\nexport class XmlResolver {\n private _localPath = '';\n\n private _downloader!: DownloaderInterface;\n\n public static TYPE_XSD = 'XSD';\n\n public static TYPE_XSLT = 'XSLT';\n\n public static TYPE_CER = 'CER';\n\n constructor(localPath: string | null = null, downloader: DownloaderInterface | null = null) {\n this.setLocalPath(localPath);\n this.setDownloader(downloader);\n }\n\n public static defaultLocalPath(): string {\n // drop 2 dirs: src/xml-resolver\n return join(__dirname, '..', '..', 'build', 'resources');\n }\n\n /**\n * Set the localPath to the specified value.\n * If localPath is null then the value of defaultLocalPath is used.\n *\n * @param localPath - values: '' -- no resolve, null -- default path, anything else is the path\n */\n public setLocalPath(localPath: string | null = null): void {\n if (localPath === null) {\n localPath = XmlResolver.defaultLocalPath();\n }\n this._localPath = localPath;\n }\n\n /**\n * Return the configured localPath.\n * An empty string means that it is not configured and method resolve will return the same url as received\n */\n public getLocalPath(): string {\n return this._localPath;\n }\n\n /**\n * Return when a local path has been set\n */\n public hasLocalPath(): boolean {\n return '' !== this._localPath;\n }\n\n /**\n * Set the downloader object.\n * If send a null value the object return by defaultDownloader will be set.\n *\n * @param downloader - downloader implementation\n */\n public setDownloader(downloader: DownloaderInterface | null = null): void {\n if (!downloader) {\n downloader = XmlResolver.defaultDownloader();\n }\n this._downloader = downloader;\n }\n\n public static defaultDownloader(): DownloaderInterface {\n return new NodeDownloader();\n }\n\n public getDownloader(): DownloaderInterface {\n return this._downloader;\n }\n\n public async resolve(resource: string, type = ''): Promise<string> {\n if (!this.hasLocalPath()) {\n return resource;\n }\n if ('' == type) {\n type = this.obtainTypeFromUrl(resource);\n } else {\n type = type.toUpperCase();\n }\n const retriever = this.newRetriever(type);\n if (!retriever) {\n throw new Error(`Unable to handle the resource (Type: ${type}) ${resource}`);\n }\n const local = retriever.buildPath(resource);\n if (!existsSync(local)) {\n await retriever.retrieve(resource);\n }\n\n return local;\n }\n\n public obtainTypeFromUrl(url: string): string {\n if (this.isResourceExtension(url, 'xsd')) {\n return XmlResolver.TYPE_XSD;\n }\n if (this.isResourceExtension(url, 'xslt')) {\n return XmlResolver.TYPE_XSLT;\n }\n if (this.isResourceExtension(url, 'cer')) {\n return XmlResolver.TYPE_CER;\n }\n\n return '';\n }\n\n protected isResourceExtension(resource: string, extension: string): boolean {\n extension = `.${extension}`;\n if (extension.length > resource.length) {\n return false;\n }\n\n return resource.toLowerCase().endsWith(extension);\n }\n\n /**\n * Create a new Retriever depending on the type parameter, only allow TYPE_XSLT and TYPE_XSD\n *\n * @param type -\n */\n public newRetriever(type: string): RetrieverInterface | undefined {\n if (!this.hasLocalPath()) {\n throw new Error('Cannot create a retriever if no local path was found');\n }\n if (XmlResolver.TYPE_XSLT === type) {\n return this.newXsltRetriever();\n }\n if (XmlResolver.TYPE_XSD === type) {\n return this.newXsdRetriever();\n }\n if (XmlResolver.TYPE_CER === type) {\n return this.newCerRetriever();\n }\n\n return undefined;\n }\n\n public newXsltRetriever(): XsltRetriever {\n return new XsltRetriever(this.getLocalPath(), this.getDownloader());\n }\n\n public newXsdRetriever(): XsdRetriever {\n return new XsdRetriever(this.getLocalPath(), this.getDownloader());\n }\n\n public newCerRetriever(): CerRetriever {\n return new CerRetriever(this.getLocalPath(), this.getDownloader());\n }\n\n public resolveCadenaOrigenLocation(version: string): Promise<string> {\n return this.resolve(CfdiDefaultLocations.location(version), XmlResolver.TYPE_XSLT);\n }\n}\n","import { XmlResolverPropertyInterface } from './xml-resolver-property-interface';\nimport { XmlResolver } from './xml-resolver';\n\nexport abstract class XmlResolverPropertyTrait implements XmlResolverPropertyInterface {\n private _xmlResolver: XmlResolver | null = null;\n\n public getXmlResolver(): XmlResolver {\n if (!(this._xmlResolver instanceof XmlResolver)) {\n throw new Error('There is not current xmlResolver');\n }\n\n return this._xmlResolver;\n }\n\n public hasXmlResolver(): boolean {\n return this._xmlResolver instanceof XmlResolver;\n }\n\n public setXmlResolver(xmlResolver: XmlResolver | null = null): void {\n this._xmlResolver = xmlResolver;\n }\n}\n","import { ContainerWithAttributeInterface } from './container-with-attribute-interface';\n\nexport class DomElementContainer implements ContainerWithAttributeInterface {\n private _element: Element;\n\n constructor(element: Element) {\n this._element = element;\n }\n\n public getAttributeValue(attribute: string): string {\n return this._element.getAttribute(attribute) || '';\n }\n}\n","import { CNodeInterface } from '@nodecfdi/cfdiutils-common';\nimport { ContainerWithAttributeInterface } from './container-with-attribute-interface';\n\nexport class NodeContainer implements ContainerWithAttributeInterface {\n private _node: CNodeInterface;\n\n constructor(node: CNodeInterface) {\n this._node = node;\n }\n\n public getAttributeValue(attribute: string): string {\n return this._node.get(attribute);\n }\n}\n","import { CNodeInterface, Xml } from '@nodecfdi/cfdiutils-common';\nimport { ContainerWithAttributeInterface } from './container-with-attribute-interface';\nimport { DomElementContainer } from './dom-element-container';\nimport { NodeContainer } from './node-container';\n\nexport abstract class VersionDiscoverer {\n /**\n * This method should be implemented and return Record of key/value elements\n * where the key is the version number\n * and the value is the attribute to query\n */\n public abstract rules(): Record<string, string>;\n\n public discover(container: ContainerWithAttributeInterface): string {\n for (const [versionNumber, attribute] of Object.entries(this.rules())) {\n const currentValue = container.getAttributeValue(attribute);\n if (versionNumber === currentValue) {\n return versionNumber;\n }\n }\n\n return '';\n }\n\n public getFromDOMElement(element: Element): string {\n return this.discover(new DomElementContainer(element));\n }\n\n public getFromDOMDocument(document: Document): string {\n return this.getFromDOMElement(Xml.documentElement(document));\n }\n\n public getFromNode(node: CNodeInterface): string {\n return this.discover(new NodeContainer(node));\n }\n\n public getFromXmlString(contents: string): string {\n return this.getFromDOMDocument(Xml.newDocumentContent(contents));\n }\n}\n","import { VersionDiscoverer } from '../version-discovery/version-discoverer';\n\nexport class TfdVersion extends VersionDiscoverer {\n protected static createDiscoverer(): VersionDiscoverer {\n return new TfdVersion();\n }\n\n public rules(): Record<string, string> {\n return {\n '1.1': 'Version',\n '1.0': 'version'\n };\n }\n}\n","import { XsltBuilderPropertyInterface } from './xslt-builder-property-interface';\nimport { XsltBuilderInterface } from './xslt-builder-interface';\n\nexport abstract class XsltBuilderPropertyTrait implements XsltBuilderPropertyInterface {\n private _xsltBuilder: XsltBuilderInterface | null = null;\n\n public getXsltBuilder(): XsltBuilderInterface {\n if (!this._xsltBuilder) {\n throw new Error('There is no current xsltBuilder');\n }\n\n return this._xsltBuilder;\n }\n\n public hasXsltBuilder(): boolean {\n return !!this._xsltBuilder;\n }\n\n public setXsltBuilder(xsltBuilder: XsltBuilderInterface | null): void {\n this._xsltBuilder = xsltBuilder;\n }\n}\n","import { XsltBuilderInterface } from './xslt-builder-interface';\n\nexport abstract class AbstractXsltBuilder implements XsltBuilderInterface {\n public abstract build(xmlContent: string, xsltLocation: string): Promise<string>;\n\n protected assertBuildArgument(xmlContent: string, xsltLocation: string): string {\n if ('' === xmlContent) {\n throw new Error('The XML content to transform is empty');\n }\n if ('' === xsltLocation) {\n throw new Error('Xslt location was not set');\n }\n\n return '';\n }\n}\n","export class XsltBuildException extends Error {}\n","import { accessSync, constants, existsSync, statSync, write } from 'fs';\nimport { cleanupSync, open } from 'temp';\nimport { exec } from 'child_process';\n\nimport { AbstractXsltBuilder } from './abstract-xslt-builder';\nimport { XsltBuildException } from './xslt-build-exception';\n\nexport class SaxonbCliBuilder extends AbstractXsltBuilder {\n private _executablePath!: string;\n\n constructor(executablePath: string) {\n super();\n this.setExecutablePath(executablePath);\n }\n\n public setExecutablePath(executablePath: string): void {\n if ('' === executablePath) {\n throw new SyntaxError('The executable path for SaxonB cannot be empty');\n }\n this._executablePath = executablePath;\n }\n\n public getExecutablePath(): string {\n return this._executablePath;\n }\n\n private retrieveValidExecutable(): string {\n const executable = this.getExecutablePath();\n if (!existsSync(executable)) {\n throw new XsltBuildException('The executable path for SaxonB does not exists');\n }\n if (statSync(executable).isDirectory()) {\n throw new XsltBuildException('The executable path for SaxonB is a directory');\n }\n try {\n accessSync(executable, constants.X_OK);\n } catch (e) {\n throw new XsltBuildException('The executable path for SaxonB is not executable');\n }\n\n return executable;\n }\n\n private isValidXslt(xsltLocation: string): void {\n if (!existsSync(xsltLocation)) {\n throw new XsltBuildException('Xslt location was not found');\n }\n }\n\n public build(xmlContent: string, xsltLocation: string): Promise<string> {\n this.assertBuildArgument(xmlContent, xsltLocation);\n const executable = this.retrieveValidExecutable();\n this.isValidXslt(xsltLocation);\n\n return new Promise<string>((resolve, reject) => {\n open({ suffix: 'xml' }, (err, info) => {\n if (err) {\n return reject(new XsltBuildException('Error while loading the xml content'));\n }\n write(info.fd, xmlContent, (error) => {\n if (error) {\n return reject(new XsltBuildException('Error while loading the xml content'));\n }\n const args: string[] = [];\n args.push(`-s:${info.path}`);\n args.push(`-xsl:${xsltLocation}`);\n args.push('-warnings:silent');\n const finalCommand = `${executable} ${args.join(' ')}`;\n exec(\n finalCommand,\n {\n maxBuffer: 1024 * 1024 * 100 // 100MB\n },\n (errorCmd, stdout, stderr) => {\n cleanupSync();\n if (errorCmd) {\n return reject(new XsltBuildException(`Transformation error: ${stderr}`));\n }\n\n if ('<?xml version=\"1.0\" encoding=\"UTF-8\"?>' === stdout.trim()) {\n return reject(new XsltBuildException('Transformation error'));\n }\n\n return resolve(stdout.trim());\n }\n );\n });\n });\n });\n }\n}\n","import { Mixin } from 'ts-mixer';\nimport { TfdVersion } from './tfd-version';\nimport { XmlResolverPropertyInterface } from '../xml-resolver/xml-resolver-property-interface';\nimport { XsltBuilderPropertyInterface } from '../cadena-origen/xslt-builder-property-interface';\nimport { XmlResolverPropertyTrait } from '../xml-resolver/xml-resolver-property-trait';\nimport { XsltBuilderPropertyTrait } from '../cadena-origen/xslt-builder-property-trait';\nimport { XmlResolver } from '../xml-resolver/xml-resolver';\nimport { XsltBuilderInterface } from '../cadena-origen/xslt-builder-interface';\nimport { SaxonbCliBuilder } from '../cadena-origen/saxonb-cli-builder';\n\nclass TfdCadenaDeOrigen\n extends Mixin(XmlResolverPropertyTrait, XsltBuilderPropertyTrait)\n implements XmlResolverPropertyInterface, XsltBuilderPropertyInterface\n{\n public static TFD_10 = 'http://www.sat.gob.mx/sitio_internet/timbrefiscaldigital/cadenaoriginal_TFD_1_0.xslt';\n\n public static TFD_11 = 'http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/cadenaoriginal_TFD_1_1.xslt';\n\n constructor(xmlResolver: XmlResolver | null = null, xsltBuilder: XsltBuilderInterface | null = null) {\n super();\n this.setXmlResolver(xmlResolver || new XmlResolver());\n this.setXsltBuilder(xsltBuilder || new SaxonbCliBuilder('/usr/bin/saxonb-xslt'));\n }\n\n public async build(tfdXmlString: string, version = ''): Promise<string> {\n // this will throw an exception if no resolver is set\n const resolver = this.getXmlResolver();\n\n // obtain version if it was not set\n if (version === '') {\n version = new TfdVersion().getFromXmlString(tfdXmlString);\n }\n\n // get remote location of the xslt\n const defaultXslt = TfdCadenaDeOrigen.xsltLocation(version);\n\n // get local xslt\n const localXsd = await resolver.resolve(defaultXslt);\n\n // return transformation\n return this.getXsltBuilder().build(tfdXmlString, localXsd);\n }\n\n public static xsltLocation(version: string): string {\n if ('1.1' === version) {\n return TfdCadenaDeOrigen.TFD_11;\n }\n if ('1.0' === version) {\n return TfdCadenaDeOrigen.TFD_10;\n }\n throw new Error(`Cannot get the xslt location for version ${version}`);\n }\n}\n\nexport { TfdCadenaDeOrigen };\n","import { Certificate } from '@nodecfdi/credentials';\nimport { CertificadoPropertyInterface } from './certificado-property-interface';\n\nexport abstract class CertificadoPropertyTrait implements CertificadoPropertyInterface {\n private _certificado: Certificate | null = null;\n\n public hasCertificado(): boolean {\n return this._certificado instanceof Certificate;\n }\n\n public getCertificado(): Certificate {\n if (!(this._certificado instanceof Certificate)) {\n throw new Error('There is no current certificado');\n }\n\n return this._certificado;\n }\n\n public setCertificado(certificado: Certificate | null = null): void {\n this._certificado = certificado;\n }\n}\n","import { CNodeInterface } from '@nodecfdi/cfdiutils-common';\nimport { writeFileSync } from 'fs';\nimport { Certificate } from '@nodecfdi/credentials';\n\nexport class NodeCertificado {\n private _comprobante: CNodeInterface;\n\n constructor(comprobante: CNodeInterface) {\n this._comprobante = comprobante;\n }\n\n /**\n * Extract the certificate from Comprobante.certificado\n * If the node does not exist return an empty string\n * The returned string is no longer base64 encoded\n *\n * @throws Error If the certificado attribute is not a valid base64 encoded string\n */\n public extract(): string {\n const version = this.getVersion();\n let attr = '';\n if ('3.2' === version) {\n attr = 'certificado';\n } else if ('3.3' === version) {\n attr = 'Certificado';\n } else if ('4.0' === version) {\n attr = 'Certificado';\n } else {\n throw new Error('Unsupported or unknown version');\n }\n const certificateBase64 = this._comprobante.searchAttribute(attr);\n if ('' === certificateBase64) {\n return '';\n }\n\n let certificateBin = '';\n try {\n certificateBin = Buffer.from(certificateBase64, 'base64').toString('binary');\n } catch (e) {\n // ignore\n }\n if ('' === certificateBin) {\n throw new Error('The certificado attribute is not a valid base64 encoded string');\n }\n\n return certificateBin;\n }\n\n public getVersion(): string {\n if ('3.2' === this._comprobante.searchAttribute('version')) {\n return '3.2';\n }\n if ('3.3' === this._comprobante.searchAttribute('Version')) {\n return '3.3';\n }\n if ('4.0' === this._comprobante.searchAttribute('Version')) {\n return '4.0';\n }\n\n return '';\n }\n\n /**\n * Extract and save the certificate into a specified location\n *\n * @see {@link NodeCertificado.extract}\n *\n * @param filename -\n *\n * @throws Error If the filename to store the certificate is empty\n * @throws Error If the certificado attribute is empty\n * @throws Error If cannot write the contents of the certificate\n */\n public save(filename: string): void {\n if ('' === filename) {\n throw new Error('The filename to store the certificate is empty');\n }\n const certificado = this.extract();\n if ('' === certificado) {\n throw new Error('The certificado attribute is empty');\n }\n try {\n writeFileSync(filename, certificado);\n } catch (e) {\n throw new Error(`Unable to write the certificate contents into ${filename}`);\n }\n }\n\n public obtain(): Certificate {\n const certificado = this.extract();\n if ('' === certificado) {\n throw new Error('The certificado attribute is empty');\n }\n\n return new Certificate(certificado);\n }\n}\n","export class SatCertificateNumber {\n private readonly _id: string;\n\n constructor(id: string) {\n if (!SatCertificateNumber.isValidCertificateNumber(id)) {\n throw new Error('The certificate number is not correct');\n }\n this._id = id;\n }\n\n public number(): string {\n return this._id;\n }\n\n public remoteUrl(): string {\n return [\n 'https://rdc.sat.gob.mx/rccf',\n `/${this._id.substring(0, 6)}`,\n `/${this._id.substring(6, 12)}`,\n `/${this._id.substring(12, 14)}`,\n `/${this._id.substring(14, 16)}`,\n `/${this._id.substring(16, 18)}`,\n `/${this._id}`,\n '.cer'\n ].join('');\n }\n\n public static isValidCertificateNumber(id: string): boolean {\n return /^\\d{20}$/.test(id);\n }\n}\n"],"names":["CerRetriever","AbstractBaseRetriever","constructor","basePath","downloader","checkIsValidDownloadedFile","source","localPath","Promise","resolve","reject","Certificate","openFile","e","unlink","Error","retrieve","url","clearHistory","localFileName","download","addToHistory","CfdiDefaultLocations","location","version","XSLT_40","XSLT_33","XSLT_32","XmlResolver","_localPath","_downloader","setLocalPath","setDownloader","defaultLocalPath","join","__dirname","getLocalPath","hasLocalPath","defaultDownloader","NodeDownloader","getDownloader","resource","type","obtainTypeFromUrl","toUpperCase","retriever","newRetriever","local","buildPath","existsSync","isResourceExtension","TYPE_XSD","TYPE_XSLT","TYPE_CER","extension","length","toLowerCase","endsWith","newXsltRetriever","newXsdRetriever","newCerRetriever","undefined","XsltRetriever","XsdRetriever","resolveCadenaOrigenLocation","XmlResolverPropertyTrait","_xmlResolver","getXmlResolver","hasXmlResolver","setXmlResolver","xmlResolver","DomElementContainer","element","_element","getAttributeValue","attribute","getAttribute","NodeContainer","node","_node","get","VersionDiscoverer","discover","container","versionNumber","Object","entries","rules","currentValue","getFromDOMElement","getFromDOMDocument","document","Xml","documentElement","getFromNode","getFromXmlString","contents","newDocumentContent","TfdVersion","createDiscoverer","XsltBuilderPropertyTrait","_xsltBuilder","getXsltBuilder","hasXsltBuilder","setXsltBuilder","xsltBuilder","AbstractXsltBuilder","assertBuildArgument","xmlContent","xsltLocation","XsltBuildException","SaxonbCliBuilder","executablePath","_executablePath","setExecutablePath","SyntaxError","getExecutablePath","retrieveValidExecutable","executable","statSync","isDirectory","accessSync","constants","X_OK","isValidXslt","build","open","suffix","err","info","write","fd","error","args","push","path","finalCommand","exec","maxBuffer","errorCmd","stdout","stderr","cleanupSync","trim","TfdCadenaDeOrigen","Mixin","tfdXmlString","resolver","defaultXslt","localXsd","TFD_11","TFD_10","CertificadoPropertyTrait","_certificado","hasCertificado","getCertificado","setCertificado","certificado","NodeCertificado","comprobante","_comprobante","extract","getVersion","attr","certificateBase64","searchAttribute","certificateBin","Buffer","from","toString","save","filename","writeFileSync","obtain","SatCertificateNumber","id","_id","isValidCertificateNumber","number","remoteUrl","substring","test"],"mappings":"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"}