FEAT: pii

This commit is contained in:
marcos-silva-rodrigues
2025-04-29 14:00:23 -03:00
parent 7a6db36554
commit 58e3c7be94
12 changed files with 883 additions and 59 deletions
+1
View File
@@ -14,6 +14,7 @@ interface IMetadata {
host?: string;
origin?: string;
custom_host?: string;
is_mask?: boolean;
}
export function PackTheMetadata(info: IMetadata): Metadata {
+14
View File
@@ -0,0 +1,14 @@
import { stringify } from 'csv'
export class CsvParser<T> {
async parse(data: T[]) {
return new Promise((resolve, reject) => {
stringify(data, { header: true }, function (err, output) {
if (err) reject(err);
console.log(output)
resolve(output)
});
})
}
}
+16
View File
@@ -0,0 +1,16 @@
import { readFileSync } from 'fs';
import Handlebars from 'handlebars';
export class HtmlParser<T> {
constructor(private readonly templatePath: string) {}
parse(data: T[]) {
const templateSource = readFileSync(this.templatePath, 'utf8');
const template = Handlebars.compile(templateSource);
return template({
dados: data,
dataGeracao: new Date().toLocaleString('pt-BR'),
});
}
}
+48
View File
@@ -0,0 +1,48 @@
import puppeteer from "puppeteer";
export class PDFParser<T extends string> {
async parse(data: T) {
try {
const browser = await puppeteer.launch({
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH,
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage']
});
const page = await browser.newPage();
page.setDefaultNavigationTimeout(0);
await page.setContent(data, {
waitUntil: 'networkidle0',
timeout: 30000
});
// Configurações adicionais para garantir um PDF válido
const pdfBuffer = await page.pdf({
format: 'A4',
printBackground: true,
margin: {
top: '20mm',
right: '15mm',
bottom: '20mm',
left: '15mm'
},
preferCSSPageSize: true,
displayHeaderFooter: false,
headerTemplate: '',
footerTemplate: '',
omitBackground: false,
pageRanges: '',
tagged: true,
outline: false,
timeout: 30000
});
await browser.close();
return pdfBuffer;
} catch (error) {
console.error('Error generating PDF:', error);
throw error;
}
}
}